opium
@opium
Просто люблю качественно работать

Как сделать составной индекс для повторяющихся полей в where с and и or, mysql?

Запрос такого типа


FROM `doctors`WHERE

`doctors`.`name_last` LIKE 'ROBBERT MO%' OR

`doctors`.`name_first` LIKE 'ROBBERT MO%' OR


`doctors`.`name_first` LIKE 'ROBBERT%' AND

`doctors`.`name_last` LIKE 'MO%'


Лайкает по двум полям name_last and name_first

Какой составной индекс делать для такого запроса?
  • Вопрос задан
  • 5723 просмотра
Пригласить эксперта
Ответы на вопрос 2
@shagguboy
вот такой индекс. если будет сильно большой, или селективность у полей сильно разная, можно ограничится самым селективным полем.
CREATE INDEX idx1 ON doctors (name_first, name_last)
запрос с OR индексы не использует, надо переписать на UNION
Ответ написан
Комментировать
@zuborg
Для первого запроса надо два индекса, начинающиеся с name_last и name_first соотв. Т.к. используется OR — одного составного индекса будет недостаточно.

Для второго запроса технически достаточно одного составного индекса из обеих полей, на практике же зависит от движка sql. Порядок не принципиален, но для производительности выборки желательно первым в индекс ставить поле с максимальной вариабельностью, т.е. то где больше разных вариантов значения.

Итого, для обоих запросов надо два индекса — один составной из обоих полей, второй — из одного поля, которым заканчивается первый индекс:

CREATE INDEX idx1 ON doctors (name_first, name_last)
CREATE INDEX idx2 ON doctors (name_last)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы