sql - 4 列复合索引是否有益于 3 列查询?

标签 sql sql-server database indexing

我有一个包含列 A、B、C、D、E、...、N 的表格。使用 PK(A)。我还为 DCBA 列定义了一个复合的、唯一的、非聚集索引, 按此顺序。

如果我使用如下查询:

where D = 'a' and C = 'b' and B = 'c'

如果没有 A 的子句,我还能享受索引的好处吗?

最佳答案

是的,对于这些查询,SQL 服务器可以对索引 (D, C, B, A) 执行查找操作:

WHERE D = 'd'
WHERE D = 'd' AND C = 'c'
WHERE D = 'd' AND C = 'c' AND B = 'b'
WHERE D = 'd' AND C = 'c' AND B = 'b' AND A = 'a'

它可以对这些索引执行扫描操作:

WHERE C = 'c' AND B = 'b'
WHERE A = 'a'
-- etc

但是还有一件事需要考虑:索引中列的顺序很重要。两个索引 (D, C, B, A)(B, C, D, A) 的表现可能不同。考虑以下示例:

WHERE Active = 1 AND Type = 2 AND Date = '2019-09-10'

假设数据包含两个不同的 Active 值,10 个 Type 和 1000 个 Date,(Date, Type, Active, Other) 的索引将比 (事件、类型、日期、其他)

您还可以考虑为不同的查询创建上述索引的不同变体。

PS:如果列 A 没有在 WHERE 子句中使用,那么你可以简单地 INCLUDE

关于sql - 4 列复合索引是否有益于 3 列查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262208/

相关文章:

java - Java中的MongoDb查找用户

java - 如何在Android应用程序的命令行中与sqlite3交互?

php - 如何访问 htdocs 文件夹之外的 XAMPP mysql 数据库

sql - 查找特定记录的值(value)相对于整个结果的百分比

mysql - 数据库设计最佳实践 : Return multiple rows with individual entries, 或具有多个条目的单行?

c# - Microsoft Sync Framework 唯一索引错误

sql-server - 存储过程中的 SQL case 语句

sql - 在 Access VBA 中附加到表时出错

mysql - 将两个表合并为一个并删除重复项

sql-server - SQL 查询 - 我可以不这样做吗?