クエリにパフォーマンスの問題があります。会社 (bedrijf) のテーブルとカテゴリのテーブルがあります。会社名に検索ワード t を含むすべての会社を取得する検索クエリを実行したいのですが、カテゴリ名に検索ワード t が含まれるカテゴリにあるすべての会社を取得したいと考えています。
私はこのクエリを作成しました (検索ワードは: 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%')
パフォーマンスを損なうことなく、これらのクエリを 1 つのクエリで実行するにはどうすればよいでしょうか。データベースには、bedrijf に 500.000 レコード、bedijf_categorie に 500.000 レコードが含まれています。