Как правило, вы хотите поместить в индекс более ограничительный столбец.То есть, если бы city
имел большую мощность, чем state
, вы бы использовали (city, state)
.Причина этого в том, что теоретически он позволил бы Postgres отфильтровать многие несущественные записи в первую очередь, прежде чем даже попасть во второй столбец индекса.
Но в вашем запросе есть проблема.Вы делаете select *
, и это означает, что, скорее всего, ваш индекс должен будет охватывать все столбцы в предложении select, чтобы Postgres решил использовать его.Если ваша таблица address
имеет, например, только два других столбца, то вы можете использовать этот индекс:
(city, state, col1, col2)
Указанный выше индекс называется охватывает третий и четвертый столбцыcol1
и col2
, поскольку это означает, что индекс сам по себе содержит всю информацию, необходимую для выполнения исходного запроса.Если вы попробуете select *
, а в вашей таблице будет много других столбцов, Postgres может не использовать предложенный вами индекс.