sql - 复合数据库索引

标签 sql database indexing composite-key

我正在寻找对我对数据库中复合索引的理解的确认 - 特别是与 SQL Server 2008 R2 相关的内容,如果这有所不同的话。

我想我明白索引列的顺序是至关重要的,因为如果我有一个 { [Name], [Date] } 的索引,那么一个基于 WHERE 的 SELECT基于 [Date] 的子句将无法使用索引,但 { [Date], [Name] } 的索引可以。如果 SELECT 基于两列,则任一索引都可用。

是吗?使用这样的复合索引有什么好处,每列有两个索引(即 { [Date] }{ [Name] })。

谢谢!

最佳答案

不完全是,日期上的选择仍然可以使用索引,但不如包含名称作为名称的查询那样有效,这会限制必须搜索多少索引。

如果您经常查询姓名 + 日期以及日期和姓名分开的查询,请使用 3 个索引,每个索引一个。

此外,在索引中将变化最大的字段放在首位也会更快地限制索引搜索范围,从而使其更快。

您还可以包含列、未编入索引但通常根据索引获取的数据。

关于sql - 复合数据库索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668690/

相关文章:

sql - 是否有理由不定义外键或其他键

java - Hibernate - 在 OneToMany 上使用 JOIN 时 sqlQuery 映射冗余记录

python - SQLAlchemy:AttributeError:无法在列 '_sa_instance_state' 的行中找到列

mysql - UNIQUE 约束是否会自动在字段上创建索引?

json - Elasticsearch中的AND查询

mysql - 为什么我的 SQL 查询没有使用表的复合索引?

sql - 删除的 SQL 条目是否仍然占用空间/行?

mysql - 数据库中的区域设置支持

sql - '1' 附近的语法不正确。 SQL Pivot 需要 ID、QUOTED_ID 或 '.' 错误

php - 如何使用 PHP 连接 D3 ODBC 数据库