Первая точка зрения, которую я вижу:
WHERE a.comm like '%tree%'
Даже если у вас есть индекс на GMM_SQL.comm
, подстановочный знак в левой части строки делает индекс бесполезным. Хотя это работает, это буквально худший способ поиска контента, тип данных которого связан со строками.
Полнотекстовый поиск ( ссылка на MySQL ) является предпочтительным методом поиска содержимого в строке. Но IIRC, MySQL все еще требует, чтобы таблица была MyISAM ...
Следующий пункт:
SELECT *
Возвращает все столбцы из всех таблиц, которые являются JOIN'd. Предложение SELECT должно содержать только те столбцы, которые действительно необходимы, потому что:
- Вы возвращаете больше данных, чем нужно
- Тип данных может сильно повлиять на производительность - IE: если один из столбцов - очень длинная строка или двоичные / BLOB-данные
В-третьих, ваши критерии JOIN. Чем меньше тип данных, тем быстрее выполняется запрос. Я собираюсь предположить что-нибудь с id
подразумевает INT
. Не используйте BIGINT
, если вам это не нужно.