我有一个表  eit_article表中字段id[主键]
admin varchar(50)
title varchar(1000)
addtime datetime(8)表中有数据 100W条  其中 90W条中[admin]的值为"菜鸟"在SQL查询分析器里执行 select * from eit_article where admin='菜鸟' order by addtime desc
查询时间为 31 秒
请问如何建立索引 在次就是SQL如何配合索引提高查询速度

解决方案 »

  1.   

    已经都 索引了 为什么 索引后 与 索引前 在SQL查询分析器里的执行时间都一样呢?
      

  2.   

    90W条记录,31秒有不少的时间是用于显示结果,而不是全部用于查询。工具-->选项-->结果-->废弃结果再测试
      

  3.   

    楼上的朋友 按照您的方法,解决还是一样   "索引后 与 索引前 在SQL查询分析器里的执行时间都一样"
      

  4.   

    100W查出90W内,索引的可选择性已基本没有
    又因为你是select * ,在这种情况下,基本上走非聚集索引,不一定比全表扫描快.
      

  5.   

    在这种情况下,基本上是走聚集索引
    这不是最耗资源的,主要在order by
      

  6.   


    在不走非聚集索引的情况下,order by 肯定要耗资源,但不是最耗资源的
    最耗资源的肯定是select 这90W数据,最算你没有order by ,select * from eit_article where admin='菜鸟' 也至少需要20-28s(按楼主原来加order by 31s来估计的)所以,你加非聚集索引根本没用。只有一个办法可行,就是直接构造出一个已排序的admin='菜鸟'的索引表才能将消耗减到最少:去掉id主键所自带的聚集索引,如有id条件查询,可将其设置成非聚集索引,
    将admin,addtime设置成为聚集索引(不唯一)这种情况下,select * 应该最有效。
      

  7.   


    sql server在建立主键时会将其设置成聚集索引但其实主键和聚集索引是没有任何关系的。是否走非聚集索引,关键要看查询的数据的选择性、密度、分布,再配合查看io的读写来优化查询
    像楼主90/100这样的查询结果,根本没有可选择性了。
    至于编译时间可忽略。
      

  8.   

    select 索引字段 from eit_article where admin='菜鸟' order by addtime desc 
    哈哈不用*号应该快  admin='菜鸟' 中90%你都要查出来当然读硬盘要时间啊!对不对啊!要不你用 数据库引擎优化顾问 看看哈哈比较一下
      

  9.   

    admin,addtime 索引 把sql语句中的“*”改成字段名