CREATE INDEX idx ON sometable (col1, col2, col3);
Это создаст единый индекс для всех трех полей вместе. Это прекрасно, если ваши запросы будут использовать все три поля для предложения WHERE большую часть времени:
SELECT (fields) FROM Table WHERE col1 = 1 AND col2 = 2 AND col3 = 3
Этот составной индекс также будет использоваться при запросе только к col1 и col2:
SELECT (fields) FROM Table WHERE col1 = 1 AND col2 = 2
, но его нельзя использовать, если вы запрашиваете либо col2
или col3
по отдельности, либо col2
и col3
вместе:
SELECT (fields) FROM Table WHERE col2 = 2 AND col3 = 3 -- will *NOT* use index
SELECT (fields) FROM Table WHERE col2 = 2 -- will *NOT* use index
SELECT (fields) FROM Table WHERE col3 = 3 -- will *NOT* use index
С другой стороны, если вы используете:
CREATE INDEX idx1 ON sometable (col1);
CREATE INDEX idx2 ON sometable (col2);
CREATE INDEX idx3 ON sometable (col3);
затем вы создаете три отдельных индекса на каждом из полей. В этом случае любой запрос, который использует только один из столбцов, получит выгоду от индекса этого столбца:
SELECT (fields) FROM Table WHERE col1 = 1 -- will use index on col1
SELECT (fields) FROM Table WHERE col2 = 2 -- will use index on col2
SELECT (fields) FROM Table WHERE col3 = 3 -- will use index on col3
однако, если вы запрашиваете два или все три столбца вместе в одном запросе:
SELECT (fields) FROM Table WHERE col1 = 1 AND col2 = 2 AND col3 = 3
тогда будет использоваться только один из трех созданных индексов, и он, скорее всего, будет менее эффективным, чем составной индекс (col1, col2, col3).
Так что да, безусловно, есть разница в том, как вы создаете эти индексы, но не существует единственного «лучшего способа» сделать эту индексацию. На самом деле все зависит от того, как вы запрашиваете данные, какой из двух вариантов является «лучшим» в вашем случае.