次はうまくいきますが遅すぎます。私はテーブルBに一致するレコードがあることを知る必要があるので、そこに何かトリックがありますか?MySQL:2つの表AとBが一致するレコードを検索するBが大量の場合
:
SELECT
TableA.id
FROM
TableA
LEFT JOIN
TableB
ON
TableB.TableA_id = TableA.id
WHERE
TableB.id IS NOT NULL and TableA.clientid=13 ;
CLIENTIDが現在インデックスされる(妙に反対の検索が参加していないレコードを(NULL IS)非常に速いです見つける)が、それは劇的に非常に速いからクエリを遅くし、この副次句です分。
(03May12もっと強力なサーバー上の同じデータベースでこの同じクエリを試してみましたが、クエリには1秒かかります)元のサーバーが完全にオーバーロードされているというのは皮肉なことですテーブルのサイズを減らすために削除できるレコードを特定するのに使用されます。より高速なサーバーでデータベースを再構築し、クリーンアップしてから「スロー」サーバーで再生成する必要があります)
テーブルにインデックスがありますか? – Taryn
'TableB.TableA_id'に' FOREIGN KEY'が正しく定義されていますか?それはパフォーマンスを向上させる指標となるでしょう。 ( 'TableA.id'はPKであるため、すでにインデックスされていると仮定します) –
... FOREIGN KEY(TableA_id)のように参照してください。参照表A(id)' –