Оптимизация WHERE с использованием одного значения на нескольких столбцах

0

У меня есть таблица MySQL, в которой я пытаюсь найти пару столбцов для одного значения. Это довольно большой стол, поэтому я хочу, чтобы время поиска было как можно быстрее.

Я упростил приведенные ниже таблицы для удобства понимания

SELECT * FROM clients WHERE name=? OR sirname=?

В.С.

SELECT * FROM clients WHERE ? IN (name, sirname)

с индексами по имени и sirname

EXPLAIN на первом использует индексы, но не последние

Является ли это точной или существует какая-то оптимизация под капотом, который EXPLAIN не поймает?

Сильно связано с проверкой нескольких столбцов на одно значение, но не может обсуждаться там из-за возраста потока.

Теги:
optimization

1 ответ

0

Поскольку MySQL обычно использует один индекс для ссылки на таблицу в запросе, вам, вероятно, придется сделать это следующим образом:

SELECT * FROM clients WHERE name=?
UNION
SELECT * FROM clients WHERE sirname=?

Это будет считаться двумя табличными ссылками для целей выбора индекса. В каждом случае будет использоваться соответствующий индекс.

  • 0
    Первый запрос использует индексы, MySQL прекрасно обрабатывает несколько индексов.
  • 1
    @KilleR - Проверьте EXPLAIN ; «Объединение индексов» - это препятствие для обхода отсутствия какого-либо полезного индекса. Решение Билла может использовать два отдельных индекса гораздо эффективнее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню