Во-первых, никогда используйте запятые в предложении FROM
. Всегда используйте правильный явный синтаксис JOIN
. Итак, ваш запрос (с псевдонимами таблицы):
SELECT td.data_source_path, td.name_cache
FROM data_local l JOIN
data_template_data td
ON l.id = td.local_data_id
host h
ON l.host_id = h.id
WHERE td.name_cache like '%TNY%eth0'
ORDER BY l.id;
Вы не используете host
(разве что для проверки, что l.host_id
не равно нулю). Точно так же вам не нужно data_local
. Итак, я думаю, что это делает то же самое, что ваш запрос:
SELECT td.data_source_path, td.name_cache
FROM data_template_data td
WHERE td.name_cache like '%TNY%eth0'
ORDER BY td.local_data_id;
Для этого запроса вы мало что можете сделать. Возможно, вы сможете использовать индекс на data_template_data(local_data_id)
. К сожалению, подстановочный знак в начале like
запрещает использование индекса.
Если вы ищете слова, вы можете использовать полнотекстовый индекс.