我的查询存在性能问题。我有一个公司的桌子(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%')
如何在一次查询中执行这些查询而不会丢失性能。该数据库在bedrijf中包含500.000条记录,在bedijf_categorie中包含500.000条记录。
答案 0 :(得分:1)
如果找不到更好的解决方案,可以制作UNION:
(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%')) UNION
(SELECT b.id,b.plaats
FROM bedrijf AS b
WHERE b.naam LIKE '%marko%')