私はMySQLで非常に簡単なクエリを実行しようとしています。私が達成しようとしているのは、1つのクエリで2つの異なるテーブルからいくつかのデータを選択することです。しかし、1つのテーブルからデータを選択すると、クエリは高速に実行されますが、両方のテーブルからデータを選択すると、非常に遅くなります。私はこのようなルックスを実現したい2テーブルから選択するとmysqlクエリが非常に遅い
マイクエリ:
SELECT k.klantId, b.bestelId
FROM klanten k, bestellingen b
WHERE k.klantId=b.klantId AND voornaam LIKE '%henk%'
上記のクエリを実行するために約20秒かかります。
しかし、私はこのように私のクエリを実行すると、クエリにのみ秒という以内に実行されます。
SELECT k.klantId
FROM klanten k, bestellingen b
WHERE k.klantId=b.klantId AND voornaam LIKE '%henk%'
私はまた、「bestellingen」テーブルから別の列を選択しようとしましたが、それも非常に遅いです。
余分なフィールドを選択すると、どのように遅くなる可能性があるのですか?
---------------------
私はそこにいましたが、今は選択する列を増やしてテーブルを使い果たしていました。今はもう18秒かかりますが、拡張クエリで何か問題が起きている可能性があります。誰がこれに間違っているのを見ますか?
SELECT filiaalId, bestelId, k.klantId, totaalPrijs, b.statusId, b.tmInvoer, geprint, verzendwijze, betaalwijze, afhaalpuntId, verzendkosten, betaalwijzeKosten
FROM klanten k LEFT JOIN bestellingen b ON (k.klantId=b.klantId)
WHERE (k.voornaam LIKE '%henk%' OR k.achternaam LIKE '%henk%' OR b.bestelId LIKE '%henk%')
ORDER BY b.tmInvoer DESC
クロスジョインの代わりに「INNER JOIN」を試してください。デカルト積は推奨できません。 – Gruber
インデックスを使用することを忘れないでください。 –
フラットファイルに切り替えます。 – GOD