对数据库中1万条数据进行搜索。SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC
执行需要8秒SELECT * FROM PeopleUser ORDER BY IsVIP DESC
执行需要1秒IsVIP字段是bit类型,值基本都是0。请问,查询速度为何这么慢?

解决方案 »

  1.   

    ------------------------------------------------------
    你对其他字段试试,情况一样的.SELECT * FROM PeopleUser ORDER BY IsVIP DESC  --对IsVIP排序,然后显示.SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC --对IsVIP排序,按从小到大找前20个,然后显示.明显多个步骤嘛.
      

  2.   

    bit字段排序不应该这么慢的。
      

  3.   


    你看下执行过程,应该是先找到排序好的所有数据然后再显示前20个对IsVIP做下索引的话也许会好些
      

  4.   


    按理top的要比没有TOP的快
    是不是索引有问题?
    ---try:
    DBCC CHECKTABLE ('table')
      

  5.   


    一般情况应该是有top的快一点
      

  6.   

    SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC,id desc
    你看看这个运行多少时间
      

  7.   

    因为top 20那句先执行,那时候表还没有加载到内存.瞎猜的(>"<),你反过来执行一下看看
      

  8.   

    set @@rowcount=20
    select * from PeopleUser ORDER BY IsVIP DESC 
      

  9.   

    SELECT TOP 20 * FROM PeopleUser ORDER BY IsVIP DESC 
    执行需要8秒 SELECT * FROM PeopleUser ORDER BY IsVIP DESC 
    执行需要1秒 
    /**************************************/
    第二条是在企业管理器中执行吧
      

  10.   

    多谢各位的回答,但是问题依然没有解决。首先要说明一点,bit字段在sqlserver中是无法做索引的,我尝试改变为int/smallint等类型并加入索引问题依旧。而且一开始就是通过"IsVIP DESC, ID DESC"的方式排序,因为太慢才只保留了"IsVIP DESC"部分。另外,我就是在查询分析器中执行的,对其他字段的排序速度非常快。是不是IsVIP字段重复的值太多的缘故?
      

  11.   

    有top还慢些阿……用的sql哪个版本哦再说bit用order by是不是有些多余???
      

  12.   

    set rowcount 20
    不是set @@rowcount对不起
      

  13.   

    我在30万条数据中做了测试,并没有什么异常,建议你还是 dbcc checktable一下,并且建议重建该表的索引
    set rowcount只对返回数据量大了以起作用
      

  14.   

    set rowcount 20 
    速度确实快了,请问是什么原理?为什么TOP如此之慢?
      

  15.   

    zheninchangjiang,你好,我会重新建立一次数据表。
    还想请教,IsVIP字段中全都是0是否也影响排序速度?是不是因为重复值太多了?你测试的时候也使用bit字段吗?
      

  16.   

    我好像找到问题的原因了。应用top后 bit字段排序速度变慢,之前改成int/smallint类型时可能忘记加索引,这次加上索引速度非常快!谢谢各位的热心帮助,结贴!