我在使用 InnoDB mysql 数据库时遇到问题。例如,我有两个表,事件和 events_artists 具有以下架构:
events:
id (PK)
host_id
date
events_artists:
id (PK)
event_id
artist_id
表 events 有大约 100,000 个条目, events_artists 大约有 150,000 个。
我必须做的一件事是检查表 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;
但是,主要的速度提升是添加外键。我不得不在中间删除它们以进行一些重复的搜索并现在将它们添加回来,这大大提高了速度。虽然查询之前需要一个多小时,但现在只需要一秒钟。
谢谢!
查尔斯