我的数据库表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
我的数据库表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
确保在查询中使用的列是建立索引的。
SELECT `slug`
FROM `terms`
LEFT JOIN `name_info`
ON `slug` = `imdb_id`
WHERE slug LIKE 'nm%'
AND `imdb_id` IS NULL
LIMIT 0,1;
谢谢@ sloan-thrasher此解决方案完美工作 – 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。连接可能会比子查询更好。 –