Я очень новичок в индексах в MySQL. Я знаю, мне, наверное, следовало бы это сделать раньше, но большинство проектов было достаточно маленьким для меня, чтобы уйти от него;)
Итак, теперь я тестирую его. Я выполнил свой тест, выполнив EXPLAIN
по запросу:
Query:
EXPLAIN SELECT a . *
FROM `tff__keywords2data` AS a
LEFT JOIN `tff__keywords` AS b ON a.keyword_id = b.id
WHERE (
b.keyword = 'dog' || b.keyword = 'black' || b.keyword = 'and' || b.keyword = 'white'
)
GROUP BY a.data_id
HAVING COUNT( a.data_id ) =4
Во-первых, без индексов я получил следующие результаты:
Затем с индексом data_id и keyword_id я получил следующее:
Итак, насколько я понимаю, количество строк, которые должен выполнять MySQL, идет от 61k до 10k, что должно быть хорошо?
Итак, мой вопрос: я прав? И есть ли что-нибудь еще, о чем я мог бы подумать, пытаясь оптимизировать?
UPDATE:
Далее, после некоторой помощи AJ и Piskvor, указывающей мою другую таблицу и ее ключевое слово, не имеющее индекса, я получил следующее:
Отличное улучшение! Правильно?