ключ поиска автоматически добавляет индекс ...
Ну ... в MariaDB, да. Это не стандартная функция в любом случае; другие базы данных (Oracle, DB2, PostgreSQL и т. д.) не автоматически создают индексы для принудительного применения внешних ключей.
Мне не удалось полностью понять ваш вопрос, но мне кажется, у вас есть два индекса, один из которых использует столбец a
, а другой - столбец b
. И ... вы пытаетесь решить, какой из них использовать или как их объединить.
Нетрудно заставить упомянутый вами запрос использовать индекс. Если условие WHERE равно where a=x and b=y
, то это идеальный случай, который нужно сильно ускорить, создав индекс (b, a)
, например:
create index ux_mytable_b_a on my_table (b, a);
Обратите внимание, что я использовал (b, a)
, а не (a, b)
. Таким образом, сначала выбирается наиболее селективный столбец, и у запроса меньше шансов на столкновение хешей и / или переполнение сегмента.
Теперь по поводу вашего наблюдения:
mariaDB использует пересечение двух индексов, что делает его работу намного хуже ...
Обратите внимание, что объединенный третий индекс (с двумя столбцами) позволяет избежать пересечения индекса . MariaDB автоматически выберет новый индекс, так как он быстрее, чем любая другая комбинация предыдущих.