日期:2014-05-17  浏览次数:20415 次

索引优化
本帖最后由 xs0573 于 2013-08-30 12:07:04 编辑
在SQL SERVER 2008 有一张10几万数据的表FactChangeRequest,因为经常需要使用关于列SubmitDate(非PK,FK) 的条件,所以专门对它建立了索引 ( Non-unique , Non clustered)
具体信息如图,但是貌似就性能而言还是没什么改变
打个比方
select *
from FactChangeRequest
where SubmitDate > '2009-03-12 00:00:00.000'
大概有2,万条,但是要好几分钟才会有结果
所以,请问有什么办法,可以优化下该索引
索引

------解决方案--------------------


SubmitDate 数据类型 在系统中是字符型 ,还是datetime型.
这两个是有些区别的.

引用:
select *
from FactChangeRequest
where SubmitDate > '2009-03-12 00:00:00.000'
大概有2,万条,但是要好几分钟才会有结果
所以,请问有什么办法,可以优化下该索引

------解决方案--------------------
数据经过新增、修改、删除以后,存储位置已经不连接在一起了,也就是数据存放各个碎片上,分布不均,造成查询慢,这时候需要重建索引

DBCC DBREINDEX (TableName1,Index_Name1)     
DBCC INDEXDEFRAG (TableName1,Index_Name1)

------解决方案--------------------
--10几万数据的表,你搜2W条,且是select *出所有字段,很可能走全表扫描。
--没什么办法。暂时看来:
#1.创建覆盖索引,include所有要select出来的字段;
#2.修改业务逻辑,比较分页查询。
------解决方案--------------------
这是极低选择性,一定走表扫描
------解决方案--------------------
"建立了索引 ( Non-unique , Non clustered)"你这是建立的非聚族索引,你建立聚族索引试试