У меня есть таблица MySQL, в которой я пытаюсь найти пару столбцов для одного значения. Это довольно большой стол, поэтому я хочу, чтобы время поиска было как можно быстрее.
Я упростил приведенные ниже таблицы для удобства понимания
SELECT * FROM clients WHERE name=? OR sirname=?
В.С.
SELECT * FROM clients WHERE ? IN (name, sirname)
с индексами по имени и sirname
EXPLAIN на первом использует индексы, но не последние
Является ли это точной или существует какая-то оптимизация под капотом, который EXPLAIN не поймает?
Сильно связано с проверкой нескольких столбцов на одно значение, но не может обсуждаться там из-за возраста потока.
Поскольку MySQL обычно использует один индекс для ссылки на таблицу в запросе, вам, вероятно, придется сделать это следующим образом:
SELECT * FROM clients WHERE name=?
UNION
SELECT * FROM clients WHERE sirname=?
Это будет считаться двумя табличными ссылками для целей выбора индекса. В каждом случае будет использоваться соответствующий индекс.
EXPLAIN
; «Объединение индексов» - это препятствие для обхода отсутствия какого-либо полезного индекса. Решение Билла может использовать два отдельных индекса гораздо эффективнее.