复合索引中列的顺序

Order of columns in a compound Index

我有一个 table 可以过滤三列数据:国家、州、城市。

我的应用程序中的查询变得更具选择性,但始终包括更一般的列。例如,WHERE 子句看起来像

WHERE Country = 'Canada'
WHERE Country = 'Canada' AND State = 'Ontario'
WHERE Country = 'Canada' AND State = 'Ontario' AND City = 'Toronto'

但不会只在 City 列或 State 列上有 WHERE 子句。

我的任务是为此 table 创建一个索引。我知道列顺序在创建索引时很重要,但对什么会更有效率感到困惑。

这是我正在考虑的两个选项:

选项 1:

(Country, State, City)

选项 2:

(City, State, Country)
(State, Country)
(Country)

第一个选项涵盖一个索引中的所有查询。但第二种选择(我认为)会表现更好。我想问的是使用选项 2 是否有实际的性能优势?

想法?

抱歉,如果我没有说清楚的话。让我知道是否需要澄清。谢谢!

绝对选择选项 1。

这允许为所有三个已识别的查询模式查找完全正确的行(即不多也不少)。

如果您从不单独基于该列进行查询,那么让索引先按最有选择性的列排序没有任何优势。该单列的选择性对于在多列上查找的查询没有影响。

“最有选择性的优先”比喻在 SQL 服务器社区中是一个被误解的领域。我进入 more detail here.