【发布时间】:2013-09-04 22:37:55
【问题描述】:
我对 MySQL 数据库具有只读访问权限,我需要循环以下查询大约 9000 次,每次使用不同的 $content_path_id。我从一个 PERL 脚本中调用它,该脚本从文件中提取“$content_path_id”。
SELECT an.uuid FROM alf_node an WHERE an.id IN
(SELECT anp.node_id FROM alf_node_properties anp WHERE anp.long_value IN
(SELECT acd.id FROM alf_content_data acd WHERE acd.content_url_id = $content_path_id));
以这种方式编写,每次查询都需要 永远 (每次大约需要 1 分钟)。如果我不需要的话,我真的宁愿不要等待 9000 多分钟才能完成。有没有办法加快这个查询?也许通过加入?我目前的 SQL 技能生疏得令人尴尬……
【问题讨论】:
-
为什么不在一个表中包含所有
$content_path_id,用alf_content_data连接该表(在content_url_id上),然后用alf_node_properties连接结果,然后用@ 连接结果987654327@? -
EXISTS可能比IN更快。见stackoverflow.com/questions/14190788/… -
谢谢尼赞。不幸的是,我只有对数据库的只读访问权限,所以我无法添加表。