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)
尝试将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)