2 つの大きなテーブルがあり、それらの間でアクティブな関係がいくつあるかを確認する必要があります。最初のテーブルは、約 10 万行 (ID、ID_something1、ID_something2) を持つリレーション テーブルです。2 番目のテーブルはもう少し大きく、特定の関係に関連する約 6 ミルのエントリがあります。時間の経過とともにリレーションの一部が削除されましたが、データはまだ残っていました。今、どれだけのデータがそのまま残っているのか興味があります。
だから私は次のようなものを書きました:
SELECT count(tab_data.id)
FROM tab_data, tab_rel
WHERE tab_data.id_rel = tab_rel.id
そして、私は1秒もかからずに素晴らしい(信じられる)答えを得ました.
それから、私は上の WHERE 句の正確さに疑問を持ち始め、必要なものを正確に与えるものに書き直しました。だから私はこれで終わった:
SELECT count(tab_data.id)
FROM tab_data, tab_rel
WHERE tab_data.id_rel IN
(SELECT ID FROM tab_rel)
話を短くするために、30分間のCPUの苦痛の後、MySQLサーバーを強制終了して再起動しました:Sそれ以来、MySQLのWHERE IN句に問題がある(またはあった)ことを読んだので、私は私はそれをもう一度試していないと思います。
IMO これらの 2 つのクエリは同じである必要がありますが、100% 確実である必要があります。だから私が本当に必要としているのは、誰かが私の予感を確認して、次の行で何かを教えてくれることだけです。
このテーブルは単にリレーション テーブルと呼ばれています。しかし、私は外部キーを設定していません。それらを追加することで時間関連の何かを得ることができますか、それとも何かを再コーディングする必要がありますか? (あなたの答えを読む前に、おそらくそれを調査しますが、あなたはすでにこれをすべて読んでいるので、2セントを投入できます:D )