Лучший способ создать индексы SQL? - PullRequest
3 голосов
/ 31 июля 2010

Каков наилучший способ создания индекса SQL в базе данных SQL?

CREATE INDEX idx ON sometable (col1, col2, col3);

Или

CREATE INDEX idx1 ON sometable (col1);
CREATE INDEX idx2 ON sometable (col2);
CREATE INDEX idx3 ON sometable (col3);

В чем разница между этими двумя методами?Зависит ли это от реализации SQL?(SQLite, MySQL, MSSQL, ...)?Есть ли какие-либо соображения эффективности при использовании одного из двух методов?

Ответы [ 2 ]

7 голосов
/ 31 июля 2010
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).

Так что да, безусловно, есть разница в том, как вы создаете эти индексы, но не существует единственного «лучшего способа» сделать эту индексацию. На самом деле все зависит от того, как вы запрашиваете данные, какой из двух вариантов является «лучшим» в вашем случае.

0 голосов
/ 31 июля 2010

Первый создает составной индекс по 3 столбцам, тогда как второй создает простой индекс по каждому столбцу.Ознакомьтесь с пояснениями и примерами в статье MSDN .

(сначала посмотрите раздел примеров, а затем прочитайте определения каждого типа индекса, в противном случае я считаю статью слишком пугающей)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...