【发布时间】:2012-07-23 09:50:06
【问题描述】:
我在使用 InnoDB mysql 数据库时遇到问题。例如,我有两个表,events 和 events_artists,其架构如下:
events:
id (PK)
host_id
date
events_artists:
id (PK)
event_id
artist_id
表格 events 大约有 100,000 个条目,events_artists 大约有 150,000 个。
我必须做的一件事是检查表 events 中未在表 events_artists 中引用的条目。为此,我在另一篇文章中收到了查询
SELECT * FROM events WHERE id IS NULL OR id NOT IN (SELECT event_id FROM events_artists)
从逻辑上看,这个查询对我来说看起来不错。然而,它只是非常慢。我让它运行了一个小时,仍然没有结果。那里一定有问题。
感谢您提供有关如何优化此功能的任何帮助!
谢谢
查尔斯
找到解决方案
以下查询使语句更快:
SELECT *
FROM events a
LEFT JOIN events_artists b
ON a.id = b.event_id
WHERE b.event_id IS NULL;
但是,主要的速度提升是添加外键。我不得不在中间删除它们以进行一些重复的搜索,现在又将它们添加回来,这大大提高了速度。虽然之前查询需要一个多小时,但现在只需要 一秒。
谢谢!
查尔斯
【问题讨论】:
-
EXPLAIN <your select query here>说什么?
标签: mysql performance innodb