2017-04-11 65 views
1

我的数据库表name_info有30K行&条款表60K行,当选择不在表中时,服务器CPU上升。MySQL选择不从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

谢谢@ sloan-thrasher此解决方案完美工作 – 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