MYSQL“ IN”的性能
我分两个步骤运行MYSQL查询。首先,通过一个查询获取ID列表,然后使用第二个查询沿的方式检索这些ID的数据SELECT * FROM data
WHERE id in (id1, id2
...)。我知道这听起来很骇人听闻,但是由于查询非常复杂,我已经这样做了。第一个涉及许多几何和触发法,第二个涉及许多不同的联接。我确定它们可以在单个查询中编写,但是我的MYSQL不足以实现它。
这种方法有效,但是 感觉 不对。再加上我担心它不会扩展。目前,我正在10,000个记录的数据库上进行测试,并且在“ IN”子句(即IN (id1,
id2 ... id400))中具有400个id,并且性能很好。但是,如果说有1,000,000条记录怎么办?
这种查询的性能瓶颈(速度,内存等)在哪里?任何有关如何重构这种查询的想法也很棒。(例如,如果值得在存储过程中投入使用)。
回答:
从一定数量的记录开始,a上的IN
谓词SELECT
变得比常量列表上的谓词更快。
有关性能比较,请参阅我的博客中的这篇文章:
如果在IN
子句中查询中使用的列已建立索引,如下所示:
SELECT *FROM table1
WHERE unindexed_column IN
(
SELECT indexed_column
FROM table2
)
,则此查询仅被优化为一个EXISTS
(对于的每个记录仅使用一个条目table1
)
不幸的是,MySQL
它不能执行任务HASH SEMI JOIN
或MERGE SEMI JOIN
效率更高(特别是如果两个列都已索引)。
以上是 MYSQL“ IN”的性能 的全部内容, 来源链接: utcz.com/qa/426050.html