2017-04-11 11 views
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 
+1

どのようなデータタイプを存在しませ使用しようとするには、スラグとimmdb_idのですか? – Jens

+0

String/varchar like nm1084488 – Parsa

+2

name.info.imdb_idとterms.slugの外部結合を使用して、name_infoに用語を結合してみてください。結合はおそらく副選択よりも優れています。 –

答えて

2

クエリで使用される列のインデックスが作成されていることを確認してください。

SELECT `slug` 
FROM `terms` 
LEFT JOIN `name_info` 
ON `slug` = `imdb_id` 
WHERE slug LIKE 'nm%' 
AND `imdb_id` IS NULL 
LIMIT 0,1; 
+0

ありがとう@スロアンスラッシャーこのソリューションは完全に動作します – Parsa

+0

@Parsa、よろしいですか?回答を受け入れたものとしてマークしてください。 –

0

SELECT slug FROM terms WHERE slug LIKE 'nm%' AND not exists 
(SELECT 1 FROM name_info where imdb_id = slug) LIMIT 1 
+0

ありがとう@Vecchiasignora、しかし私のSQLコードのような動作 – Parsa

関連する問題