複数の列を使用して、テーブルAからテーブルBへの記録を照合するための並べ替えを行うことを試みています。しかし何らかの理由でクエリが非常に遅いです。私は、結合されたテーブルの異なるインデックスの組み合わせを実験しようとしましたが、それらは使用されていません。そのため、常にフルテーブルスキャンを行っています。複数のJOIN varchar条件を持つテーブルのインデックス
SELECT
nc.id, nc.firstName, nc.lastName,
nc.firmName, nc.location,
nc.city AS city, nc.state AS state,
ac.id, ac.lastName, ac.firstName, ac.middleName,
IFNULL(ac.suffixName, '') AS suffixName, ac.firmName, ac.city, ac.state
FROM
NormalContacts AS nc
JOIN
AllContacts AS ac ON ((nc.firstName = ac.firstName AND nc.lastName = fa.lastName) OR (nc.firstName = fa.middleName AND nc.lastName = ac.lastName))
AND (ac.city = nc.city AND ac.state = nc.state)
JOIN
FirmInputTable AS fit ON (fit.firmName = fa.firmName AND fit.otherFirmName = nc.firmName)
WHERE
nc.crdNumber IS NULL AND nc.city IS NOT NULL AND nc.state IS NOT NULL AND nc.firmName IS NOT NULL
NormalContacts
AllContacts
は337250のレコードですしながら、1,000レコードです。 JOIN
条件のすべてのフィールドはvarcharです。ここで
EXPLAIN
結果である:
*スクリーンショットAllContacts
でFA、タイプミスのため申し訳ありません。
誰でもこのクエリを最適化する方法を提案したり、間違っていることを教えてください。前もって感謝します!
私たちにはじめてご相談ください - http://sqlfiddle.com/あなたはより高い品質の応答を得る可能性が高いです。特に、あなたのインデックスを見せてください。 –
J_Hの提案通り、フィドルを使うことができます。オプティマイザがあなたが提案したインデックスを強制的に使用させるために 'use index'を使ってみましたか? –