MYSQL"IN"的表现

Roy*_*Roy 23 mysql performance

我分两步运行MYSQL查询.首先,我得到一个带有一个查询的id列表,然后使用第二个查询检索这些id的数据SELECT * FROM data WHERE id in (id1, id2 ...).我知道这听起来很糟糕,但我这样做是因为查询非常复杂; 第一个涉及大量的几何和触发测量,第二个涉及许多不同的连接.我确信它们可以写在一个查询中,但是我的MYSQL还不够好.

这种方法有效,但感觉不对; 加上我担心它不会扩展.目前我正在测试10,000个记录的数据库,在"IN"子句中有400个ID(即IN (id1, id2 ... id400))并且性能很好.但如果说有1,000,000条记录怎么办?

这种查询的性能瓶颈(速度,内存等)在哪里?关于如何重构这种查询的任何想法都很棒.(例如,如果值得对存储过程进行swot).

Qua*_*noi 19

从一定数量的记录开始,a上的IN谓词SELECT变得比常量列表上的谓词快.

在我的博客中查看此文章以进行性能比较:

如果IN子句中的查询中使用的列被索引,如下所示:

SELECT  *
FROM    table1
WHERE   unindexed_column IN
        (
        SELECT  indexed_column
        FROM    table2
        )
Run Code Online (Sandbox Code Playgroud)

,然后这个查询只是优化到一个EXISTS(它使用每个记录的一个条目table1)

不幸的是,MySQL无法做到HASH SEMI JOINMERGE SEMI JOIN哪些更有效(特别是如果两列都被索引).