在 Postgres 中创建索引的正确列顺序

Sam*_*gri 6 sql postgresql indexing

Address考虑具有两列的表textCityState。我将实现以下查询:

select * from address where city = $1 and state = $2;
Run Code Online (Sandbox Code Playgroud)

为了能够通过索引搜索,我将创建一个索引:

create index address_city_state on address(city,state);
Run Code Online (Sandbox Code Playgroud)

问题是,考虑到城市值比州值变化更大,在创建索引时设置列的顺序(首先是城市而不是州)对查询性能的影响还是以任何其他方式?

Gor*_*off -1

对于此查询:

where city = $1 and state = $2
Run Code Online (Sandbox Code Playgroud)

哪个键先按并不重要。两个键都将用于查找(使用索引查找)特定行。

如果city/state总是一起使用并且总是与 一起使用=,那么我可能会state首先放置然后放置city,因为这遵循地理层次结构。但是,我不认为有任何性能优势。

如果存在其他潜在查询,则可能会影响键的顺序。

=当子句中并非所有键都进行比较时,键的顺序很重要where。这里的情况似乎并非如此。

  • 您有解释或参考为什么它不重要吗?如果索引是两列值的哈希值,我知道顺序并不重要,但如果单独索引列,则每列的基数会很重要,对吧? (2认同)