My DBテーブルのname_infoには30Kの行があります&テーブルの60K行でテーブルを選択しないと、サーバCPUが起動します。MySQL SELECT NOT IN 30K行から高速
1行を高速に選択するクエリを作成するにはどうすればよいですか?
SELECT slug FROM terms WHERE slug LIKE 'nm%' AND slug NOT IN
(SELECT imdb_id FROM name_info) LIMIT 1
My DBテーブルのname_infoには30Kの行があります&テーブルの60K行でテーブルを選択しないと、サーバCPUが起動します。MySQL SELECT NOT IN 30K行から高速
1行を高速に選択するクエリを作成するにはどうすればよいですか?
SELECT slug FROM terms WHERE slug LIKE 'nm%' AND slug NOT IN
(SELECT imdb_id FROM name_info) LIMIT 1
クエリで使用される列のインデックスが作成されていることを確認してください。
SELECT `slug`
FROM `terms`
LEFT JOIN `name_info`
ON `slug` = `imdb_id`
WHERE slug LIKE 'nm%'
AND `imdb_id` IS NULL
LIMIT 0,1;
ありがとう@スロアンスラッシャーこのソリューションは完全に動作します – Parsa
@Parsa、よろしいですか?回答を受け入れたものとしてマークしてください。 –
SELECT slug FROM terms WHERE slug LIKE 'nm%' AND not exists
(SELECT 1 FROM name_info where imdb_id = slug) LIMIT 1
ありがとう@Vecchiasignora、しかし私のSQLコードのような動作 – Parsa
どのようなデータタイプを存在しませ使用しようとするには、スラグとimmdb_idのですか? – Jens
String/varchar like nm1084488 – Parsa
name.info.imdb_idとterms.slugの外部結合を使用して、name_infoに用語を結合してみてください。結合はおそらく副選択よりも優れています。 –