【发布时间】:2015-10-29 16:40:17
【问题描述】:
我有 2 个表(UserLog 和 UserInfo),其中在 User_UID 列上有一个非聚集索引,这是一个唯一标识符。
我有很多选择查询在 User_UID 列上连接这两个表。
这些表上没有聚集索引;因此,为了提高读取性能,我决定创建一个新列 User_ID,然后在每个表上的该列上创建一个集群索引。
然后我测试了新架构并获得了很好的结果,因为我减少了对两个表的逻辑读取,因为查询优化器不再使用 RID 查找来检索剩余信息。相反,它只使用集群索引搜索。
只有当页面已经在内存缓存中时,即在 2 次执行之后,我才能获得这些好的结果。但是,如果我清理缓存(dbcc dropcleanbuffers),则第一次执行选择查询也会减少逻辑读取,但经过的时间比我执行与旧架构(没有聚集索引)相同的查询时的时间要长。清理缓存。
所以我的问题是为什么清理缓存后新架构的运行时间会增加。是不是因为在第一次执行时所有数据都必须进入内存缓存,并且由于集群索引中的数据比非集群索引中的数据多,所以需要更多时间??
提前致谢
【问题讨论】:
标签: sql-server