复合索引中列的顺序
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.
我有一个 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.