Повышение производительности для запроса, включающего много условий, с помощью оператора «или» - PullRequest
0 голосов
/ 29 января 2019

У меня есть таблица с тремя столбцами (Регион, Штат, Город)

CREATE TABLE ads (
    Region varchar(100),
    State varchar(100),
    City varchar(100),
    ....
);

И я хочу выполнить следующий запрос

SELECT * FROM ads
WHERE region=? OR state=? OR city=?

Какой лучший индекс я могуиспользовать для уменьшения времени поиска?

Я пытался использовать многостолбцовый индекс

CREATE INDEX index_name
ON ads (region, state, city);

Но, похоже, он не работает

1 Ответ

0 голосов
/ 29 января 2019

Этот индекс не поможет.Было бы очень полезно, если бы WHERE использовал ANDs вместо ORs.

План A: FULLTEXT(region, state, city) и WHERE MATCH(region, state, city) AGAINST('+?' IN BOOLEAN MODE).Но есть некоторые предостережения с FULLTEXT, так что вы можете найти это не идеальным, несмотря на то, что очень быстр.

План Б: Превратите OR в UNION: обсуждение

План C: Соедините три столбца в один и используйте WHERE location LIKE CONCAT('%', ?, '%').Это не поможет, так как по-прежнему нужна полная банка.

План D: Изменение пользовательского интерфейса и / или ожиданий пользователя.

...