如何优化这个MySQL慢(非常慢)的查询?

Cha*_*esS 3 mysql optimization

我有一个2 GB的mysql表,行500k行,我在没有负载的系统上运行以下查询.

select * from mytable 
where name in ('n1', 'n2', 'n3', 'n4', ... bunch more... ) 
order by salary
Run Code Online (Sandbox Code Playgroud)

它需要一个文件存储,并在50到70秒之间完成.

按工资删除订单并在应用程序中进行排序时,总运行时间(包括排序)减少到大约25-30秒.但那仍然太过分了.

知道如何加快速度吗?

谢谢.

Eri*_*ric 5

将名称列表放入临时表中,然后在两个表上执行内部联接.这种方法比为每行梳理整个列表要快得多.这是伪代码:

create temporary table names
    (name varchar(255));

insert into names values ('n1'),('n2'),...,('nn');

select
    a.*
from
    mytable a
    inner join names b on
        a.name = b.name
Run Code Online (Sandbox Code Playgroud)

另请注意,name应该有一个索引.这使事情变得更快.感谢Thomas发表此笔记.

  • 确保原始表具有名称索引以充分利用连接. (3认同)