我有一个表 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如何配合索引提高查询速度
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如何配合索引提高查询速度
又因为你是select * ,在这种情况下,基本上走非聚集索引,不一定比全表扫描快.
这不是最耗资源的,主要在order by
在不走非聚集索引的情况下,order by 肯定要耗资源,但不是最耗资源的
最耗资源的肯定是select 这90W数据,最算你没有order by ,select * from eit_article where admin='菜鸟' 也至少需要20-28s(按楼主原来加order by 31s来估计的)所以,你加非聚集索引根本没用。只有一个办法可行,就是直接构造出一个已排序的admin='菜鸟'的索引表才能将消耗减到最少:去掉id主键所自带的聚集索引,如有id条件查询,可将其设置成非聚集索引,
将admin,addtime设置成为聚集索引(不唯一)这种情况下,select * 应该最有效。
sql server在建立主键时会将其设置成聚集索引但其实主键和聚集索引是没有任何关系的。是否走非聚集索引,关键要看查询的数据的选择性、密度、分布,再配合查看io的读写来优化查询
像楼主90/100这样的查询结果,根本没有可选择性了。
至于编译时间可忽略。
哈哈不用*号应该快 admin='菜鸟' 中90%你都要查出来当然读硬盘要时间啊!对不对啊!要不你用 数据库引擎优化顾问 看看哈哈比较一下