Mysql: как сделать индекс по таблице - PullRequest
0 голосов
/ 26 февраля 2011

Я хотел бы знать, когда мне нужно поместить несколько индексов, если я сделаю их под тем же «индексом» или с другим индексом?

INDEX `field1` (`field1`)
INDEX `field2` (`field2`)

или

INDEX `field1` (`field1`,`field2`)

Есть ли различия?

спасибо

Ответы [ 2 ]

0 голосов
/ 26 февраля 2011

Есть разница.Индекс, состоящий из двух (или более) столбцов, строится в соответствии с указанным вами порядком столбцов.Он может быть использован только при поиске первых X полей.Допустим, у вас есть индекс

exampleIndex (`a`, `b`, `c`)

Он будет использоваться при выполнении запросов типа:

SELECT * FROM tbl WHERE a = 1;
SELECT * FROM tbl WHERE a = 1 AND b = 2;
SELECT * FROM tbl WHERE a = 1 AND b = 2 AND c = 3;

Он НЕ будет использоваться при выполнении запросов типа:

SELECT * FROM tbl WHERE b = 2;
SELECT * FROM tbl WHERE c = 3;
SELECT * FROM tbl WHERE b = 2 AND c = 3;

В запросах первого типа наличие индекса из 3 полей будет быстрее, чем отдельных индексов, поэтому решение о том, как построить индексы, зависит от того, какие типы запросов вам понадобятся.

0 голосов
/ 26 февраля 2011

Да, есть разница. Смотри: когда ты собираешься выполнить запрос как

SELECT * WHERE a = '1' and b = '2'

вы создадите один индекс для столбцов a и b:

INDEX `field1` (`field1`,`field2`)

Два индекса будут медленнее.

Извините за мой плохой английский.

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