【问题标题】:using sql server index to better performance使用 sql server 索引来获得更好的性能
【发布时间】:2015-10-29 16:40:17
【问题描述】:

我有 2 个表(UserLog 和 UserInfo),其中在 User_UID 列上有一个非聚集索引,这是一个唯一标识符。

我有很多选择查询在 User_UID 列上连接这两个表。

这些表上没有聚集索引;因此,为了提高读取性能,我决定创建一个新列 User_ID,然后在每个表上的该列上创建一个集群索引。

然后我测试了新架构并获得了很好的结果,因为我减少了对两个表的逻辑读取,因为查询优化器不再使用 RID 查找来检索剩余信息。相反,它只使用集群索引搜索。

只有当页面已经在内存缓存中时,即在 2 次执行之后,我才能获得这些好的结果。但是,如果我清理缓存(dbcc dropcleanbuffers),则第一次执行选择查询也会减少逻辑读取,但经过的时间比我执行与旧架构(没有聚集索引)相同的查询时的时间要长。清理缓存。

所以我的问题是为什么清理缓存后新架构的运行时间会增加。是不是因为在第一次执行时所有数据都必须进入内存缓存,并且由于集群索引中的数据比非集群索引中的数据多,所以需要更多时间??

提前致谢

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    无论如何,您的表上应该有一个聚集索引。如果你不这样做,你有一个堆,这需要扫描表的叶级别。使用聚集索引,您的表现在被排序为用于导航到叶级别的 b 树,并且效率更高。

    通过吹出缓冲区,无论您是在聚集索引上查找还是在堆上扫描,页面都会从磁盘中拉出,这需要时间。

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2011-11-29
      • 2021-02-05
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多