Короткий ответ: Используйте inv.type IN ("STA", "FIN")
и INDEX(client_id, type)
.
Длинный ответ:
MATCH...AGAINST
ужасно медленно, если у вас есть FULLTEXT
индекс type
. Однако это неправильное использование FULLTEXT
, поэтому я не рекомендую его.
AND (inv.type = "STA" OR inv.type = "FIN")
автоматически превращается в AND inv.type IN ("STA", "FIN")
, что достаточно быстро. Если есть INDEX(type)
, он может использовать этот индекс и быть очень быстрым. Полезность этого зависит от мощности - «тип» звучит как столбец с очень небольшим количеством значений, поэтому индекс может быть бесполезным.
Другой вопрос: Не используйте устаревшие "commajoin", используйте JOIN...ON
:
SELECT *
FROM invoice
JOIN clients ON inv.client_id = clients.ID -- How the tables relate
WHERE inv.type IN ("STA", "FIN") -- filtering
Вы должны
inv: INDEX(client_id, type)
С помощью этого 'композит' индекс берет на себя как ON и ГДЕ, избегая, как я упоминал выше, проблемы с низкой мощностью.
Почему этот вопрос ниспроверг? Разве не имеет смысла отвечать на вопросы, чем играть в полицию? – Ben