我在mySQL (MyISAM)中有一个查询:
SELECT * FROM `links` WHERE `id` IN (SELECT `link` FROM `posts` WHERE `read_time`<'2010-10-16')对我来说似乎没问题,但是MySQL挂断了。“‘links”是一个有16000行的表,“post”大约有5000行。‘'id’和'link‘是主要的
我做了一些测试:
link posts read_time<'2010-10-16')开始,然后执行外部查询(从links id IN ('1232','1354',‘3324’)选择*)。它起作用了发生什么事了呢?我找到窃听器了?还是我做错什么了?
发布于 2010-12-16 12:36:53
MySQL目前不太擅长优化此表单的语句:
SELECT *
FROM some_table
WHERE x IN (subquery)这是在MySQL的bug数据库中,应该在MySQL 5.6和MySQL 6.0中修复。要解决您的问题,可以使用连接而不是IN
SELECT links.*
FROM links
JOIN posts ON links.id = posts.link
WHERE posts.read_time < '2010-10-16'如果您还没有索引,还应该尝试在read_time上添加一个索引。
发布于 2010-12-16 12:40:01
正如马克·拜尔斯所建议的那样,使用一个连接。这是一个非常容易访问的联接介绍。。您还可以咨询MySQL关于联接操作符的文档。
发布于 2010-12-16 12:42:04
除了Mark,如果可能的话,如果您还没有这样做的话,可以在'read_time‘上使用时间戳代替日期时间。
https://stackoverflow.com/questions/4460796
复制相似问题