У меня проблема с производительностью с запросом. У меня есть таблица с компаниями (bedrijf) и таблица с категориями. Я хочу сделать поисковый запрос, в котором все компании с поисковым словом будут указаны в названии компании, и я хочу взять все компании, которые находятся в категории, где имя категории содержит слово поиска.Ошибка поиска производительности с поисковым запросом
Я сделал этот запрос (поиск wordt является: Marko):
/*8 seconds*/
SELECT b.id,b.plaats
FROM bedrijf AS b
INNER JOIN bedrijf_categorie AS bc ON bc.bedrijfid = b.id
WHERE b.naam LIKE '%marko%'
OR bc.categorieid IN
(SELECT id
FROM categorie
WHERE naam LIKE '%marko%')
Или это одно, по-прежнему испытывать то, что быстрее, с большой базой данных:
/*7.6 seconds*/
SELECT b.id,b.plaats
FROM bedrijf AS b
INNER JOIN bedrijf_categorie AS bc ON bc.bedrijfid = b.id
INNER JOIN categorie AS c ON bc.categorieid = c.id
WHERE b.naam LIKE '%marko%' OR c.naam LIKE '%marko%';
Когда я делаю запросы отдельно это происходит намного быстрее:
/*0.84 seconds*/
SELECT b.id,b.plaats
FROM bedrijf AS b
WHERE b.naam LIKE '%marko%'
/*2.39 seconds*/
SELECT b.id,b.plaats
FROM bedrijf AS b
INNER JOIN bedrijf_categorie AS bc ON bc.bedrijfid = b.id
WHERE bc.categorieid IN
(SELECT id
FROM categorie
WHERE naam LIKE '%marko%')
Как я могу выполнить эти запросы в одном запросе без потери производительности. База данных содержит 500 000 записей в постели и 500 000 записей в bedijf_categorie.
Запрос выступления зависит от * много * факторов, большинство из них * конкретный * к базе данных. Когда у вас есть «проблема с производительностью» с одним из ваших запросов, вы должны сначала использовать ['EXPLAIN'] (http://dev.mysql.com/doc/refman/5.0/en/explain.html), чтобы увидеть, как используются различные индексы (или нет), и оценить количество исследуемых строк. –