我有一个查询的性能问题。我有一张公司表(bedrijf)和一张类别表。我想做一个搜索查询,获取公司名称中包含搜索词的所有公司,并且我想获取类别名称包含搜索词的类别中的所有公司。
我做了这个查询(搜索词是: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%')
如何在一个查询中执行这些查询而不会损失性能。该数据库在bedijf 中包含500.000 条记录,在bedijf_categorie 中包含500.000 条记录。