gpt4 book ai didi

sql - 索引减少读取的行数;无性能增益

转载 作者:搜寻专家 更新时间:2023-10-30 20:50:20 25 4
gpt4 key购买 nike

我在一个大表(1600 万行)的列(日期)上创建了一个非聚集、非唯一索引,但与被迫不使用的完全相同的查询相比,我得到的查询速度非常相似任何索引。

查询 1(使用索引):

SELECT *
FROM testtable
WHERE date BETWEEN '01/01/2017' AND '03/01/2017'
ORDER BY date

查询 2(无索引):

SELECT *
FROM testtable WITH(INDEX(0))
WHERE date BETWEEN '01/01/2017' AND '03/01/2017'
ORDER BY date

两个查询运行的时间相同,返回的结果相同。查看每个的执行计划时,查询 1 的读取行数是
~ 400 万行,其中查询 2 读取 1.06 亿行。索引似乎正常工作,但我没有从中获得任何性能优势。

任何关于为什么会这样或如何在这种情况下提高我的查询速度的想法将不胜感激。

最佳答案

创建包含列的索引:Cover index

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 添加包含(或非键)列以扩展 SQL Server 中非聚集索引的功能。通过包含非键列,您可以创建涵盖更多查询的非聚集索引。这是因为非键列具有以下优点:

  • 它们可以是不允许作为索引键列的数据类型。
  • 数据库引擎在计算索引键列数或索引键大小。

当查询中的所有列都作为键列或非键列包含在索引中时,具有非键列的索引可以显着提高查询性能。实现性能提升是因为查询优化器可以在索引中找到所有列值;不访问表或聚簇索引数据,从而减少磁盘 I/O 操作。

CREATE NONCLUSTERED INDEX IX_your_index_name 
ON testtable (date)
INCLUDE (col1,col2,col3);
GO

关于sql - 索引减少读取的行数;无性能增益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46103172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com