2016-04-04 1 views
0

У меня есть таблица, состоящая из миллионов записей, для которых я буду делать выборки с помощью Where на обоих FieldA и FieldB. FieldA тысячи возможных значений, в то время как FieldB имеет только 5. Я бы бы лучше от:Индексы по полям с небольшим количеством возможных значений

  1. добавления индекса по каждой записи т.е. Index (A), Index (B)
  2. добавив индекс только FieldA
  3. добавление сгруппированных индекса т.е. Index (A, B)

ответ

0

Я предлагаю вам использования составного индекса как на поле

index my_index_name on my_table(fieldA, fieldB) 

Использование FieldA или FieldB в флиртует положении don'yt должны изменить производительность в particolare образом .., но самый выбор для флиртует является предпочтительным

0

Если вы делаете WHERE A=(constant) AND B=(constant), то INDEX(A,B) и INDEX(B,A) работают одинаково хорошо.

Но ... OR беспорядок вещи вверх. < беспорядок. IN все испортит. Etc и т.д.

Краткое правило для построения «лучшего» индекс для WHERE ... AND ...

  1. Соберите все столбцы с = (constant)первый.
  2. Затем вы можете добавить один больше колонок, участвующие в диапазоне и т.д.

Пример: WHERE A < 123 AND B = 987 может получить наибольшую выгоду от INDEX(B, A)в таком порядке.

Если у вас есть WHERE A=333 в одном запросе и WHERE B=777 в другом (ничего AND'd), то вам необходимо два индексы, один (A) (или начиная с A), и аналогичный один для B. INDEX(B, A) будет нет работа для обе.

More tips.

+0

Отличный вход спасибо. Я никогда не понимал, когда делать индексы (A, B) и Index (A), Index (B), но, кажется, из вашего ответа, что основное правило: 1) A и B должны использоваться в одном запросе и 2) положите сначала константу. – user3649739

Смежные вопросы