Моя цель - показать результаты поиска компаний как с категориями, так и без (еще не добавлено). В таблице моих компаний более 12 000 записей. Компании с категориями более или менее 200.оптимизирующий запрос (LEFT JOIN)
Существует два входа для поиска: $ name -> название компании или категории. $ id_country -> идентификатор страны
Я хочу показать: 1) сколько результатов имеется во всей базе данных. (вот почему я использую: SQL_CALC_FOUND_ROWS) 2) Я использую LIMIT, чтобы показать 10 результатов на странице (с разбивкой на страницы).
Мой запрос:
SELECT SQL_CALC_FOUND_ROWS
c.*,
lc.name as langName,
lc.shortDesc,
lc.longDesc
FROM companies c
JOIN lang_companies lc USING(id_company)
LEFT JOIN categories_companies cc USING(id_company)
LEFT JOIN lang_categories lang_cat USING (id_category)
WHERE
lc.id_lang = '2' AND c.status = 1 AND c.active = 1 AND c.id_country = ".$id_country." AND
(lc.name = LCASE('".$name."') OR (lang_cat.name = LCASE('".$name."') AND lang_cat.id_lang = '2')
OR c.city = '".$name."')
GROUP BY c.id_company
ORDER BY c.id_hierarchi asc
LIMIT 0, 10
Этот запрос выполняется более или менее 6 секунд, и я хочу, чтобы оптимизировать его. Не могли бы вы помочь мне? Буду благодарен за любые предложения.
Есть ли причина, по которой вы обычно используете AND и OR, но как только вы используете &&? На самом деле, я не знаю, что именно && делает/если есть разница с AND :) в этом коде: lang_cat.name = LCASE ('". $ Name."') && lang_cat.id_lang = '2' –
yes , моя ошибка, я только что исправил ее – Ir3nicus
Удалось ли вам решить эту проблему? Если нет, вы можете добавить текущий план выполнения запроса к этому вопросу. Затем легче анализировать возможности исполнения и возможности для оптимизации. –