MySql需要很长时间来优化无连接查询

rip*_*234 2 mysql sql optimization join query-optimization

我们有一个简单的查询,如下所示:

SELECT a,b,c,d FROM table WHERE a=1 and b IN ('aaa', 'bbb', 'ccc', ...)
Run Code Online (Sandbox Code Playgroud)

根本没有连接,IN子句中有5000个contsant值.

现在,此查询需要1-20秒才能在非常强大的(16核心)服务器上运行.该表在(a,b)上有一个索引,我们也尝试将索引反转为(b,a).服务器有大量的内存,没有人写这个表 - 只有5个进程运行选择,如上所述.

我们做了一些分析,发现有些查询在"JOIN :: optimize"(.\ sql_select.cc 977)中花了3.5秒.我提醒你,查询根本不使用连接.

在无连接表上优化连接所花费的大量时间可能是什么原因?

这是EXPLAIN SELECT的结果:

id select_type table type   possible_keys key    key_len ref rows   Extra
1  SIMPLE     table range    IX_A_B       IX_A_B 65      \N  5000   Using where
Run Code Online (Sandbox Code Playgroud)

And*_*mar 5

尝试将5000个值放在临时表中:

declare @t table (b varchar(10))
insert into b select 'aaa'
union all select 'bbb'
union all select 'c'
....

select table.*
from table
join @t t on table.b = t.b
where table.a = 1
Run Code Online (Sandbox Code Playgroud)