有关sql server索引性能的建议

时间:2015-11-16 10:24:06

标签: sql-server performance indexing

我有“UserLog”表,有15百万行。

在此表上,我在 User_ID 字段上有一个集群索引,该字段的类型为bigint标识,而 User_uid 字段,类型为varchar(35)(假冒的uniqueidentifier)。

在我的应用程序中,我们可以有两类用户连接。其中1个仅涉及0.007%的行(大约1150个原始数据超过15百万个),第2个涉及剩余行(99%)。

目标是提高0.007%用户连接的性能。

这就是为什么我创建一个'split'字段“ Userlog_ID ”,其类型位的默认值为0.因此,对于每个用户连接,我们在Userlog中插入一个新行(0为User_log的值)。

然后将更新此字段(User_Log),它将取0(对于超过99%的行)或1(对于0.007%的行),具体取决于用户类别。

然后我在这个字段上创建一个非聚集索引(User_log)。

我想要优化的选择陈述是:

SELECT      User_UID, User_LastAuthentificationDate, 
Language_ID,User_SecurityString
FROM        dbo.UserLog
WHERE        User_Active = 1                                   
AND User_UID = '00F5AA38-C288-48C6-8ED1922601819486' 

所以现在的想法是在User_Log字段上添加一个过滤器来优化性能(恰好是索引查找运算符),只有当用户属于类别1(0.007%)时才会这样做:

SELECT      User_UID, User_LastAuthentificationDate, Language_ID,User_SecurityString
FROM        dbo.UserLog
WHERE        User_Active = 1                                  
AND User_UID = '00F5AA38-C288-48C6-8ED1922601819486' 
and User_Log = 1  

在我看来,我认为既然我们添加了这个过滤器,索引搜索会表现得更好,因为我们现在有一个较小的结果集。

不幸的是,当我将2个查询与估计的执行计划进行比较时,我获得了每个查询50%的查询。对于两个查询,优化器在user_uid非聚簇索引上使用索引搜索,然后在聚簇索引(User_id)上使用键查找。

总而言之,通过在其上添加拆分字段和非聚集索引(正常或过滤),我不会提高性能。

任何人都可以解释原因。也许我的推理和我的解释完全是错误的。

谢谢

0 个答案:

没有答案