首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

[help] select话语没有用到组合索引

2013-10-13 
[help]select语句没有用到组合索引。表PagePermission: ID, AdminID, PageID, LastUpdateTime。其中:ID是主

[help] select语句没有用到组合索引。
表PagePermission: ID, AdminID, PageID, LastUpdateTime。
其中:ID是主键, (AdminID, PageID)是索引,并且非聚集、不唯一。
执行如下sql语句,没有用到(AdminID, PageID)索引。



如果将(AdminID, PageID)索引改成唯一的,那就用到了该索引。

谢谢。 sql 索引
[解决办法]
--执行下面语句,看一下AdminID = 2在里面占了百分之多少。复合索引只记录第一个索引字段的统计,很可能是因为Admin=2的记录占的比较多,所以没走索引
select AdminID, COUNT(*)
from PagePermission 
GROUP BY AdminID
ORDER BY COUNT(*) DESC

--执行下面语句,应该会走索引Seek
SELECT ID, [Admin], PageID
FROM tb
WHERE AdminID = 2 AND PageID = 3

--如果改成唯一索引,很明显,具有高选择性,就会走索引

[解决办法]
--就这个优化而言,楼主创建的索引中包含LastUpdateTime即可
CREATE INDEX IX_tb_AdminID_PageID ON dbo.tb
(
AdminID, 
PageID
)  INCLUDE(LastUpdateTime)
GO

[解决办法]
#1.记录不多时,一般倾向于全表扫描。
#2.如果有唯一索引的话,倾向于唯一索引,因为唯一就说明绝对具有高选择性。
你说的对:
#1.根数据量大小有关系。
#2.SELECT中的字段也会对执行计划产生影响。
[解决办法]
在小表上建索引的意义不大,执行计划会倾向于全表扫描.
因为读索引后再查聚集索引的成本,要高于直接全表扫描的执行成本.

热点排行