Я новичок в индексах в 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, что должно быть хорошо, верно?
Итак, мой вопрос: я прав? И есть ли еще что-нибудь, о чем я мог бы подумать, пытаясь оптимизировать?
ОБНОВЛЕНИЕ:
Более того, после некоторой помощи от AJ и Piskvor, указав на мою другую таблицу и ключевое слово столбца без индекса, я получил следующее:
Большое улучшение! Верно?