2017-02-14 96 views
0

我有很多case语句MySQL-优化case语句

SELECT 
    case when (std_no like '070%' or std_no like '071%') then 'A' 
    when (std_no like '077%' or std_no like '076%') then 'B' 
    when std_no like '075%' then 'C' 
    when std_no like '072%' then 'D' 
    when std_no like '078%' then 'E' 
    when (std_no not like '07%' and std_no not like '00%' 
     and std_no not like '0100%' 
     and substring(std_no,4,1) in('2','3')) then 'F' 
    when (std_no not like '07%' and std_no not like '00%' 
     and std_no not like '0100%' 
     and substring(std_no,4,1)='5') then 'G' 
    when (std_no not like '07%' and std_no not like '00%' 
     and std_no not like '0100%' 
     and substring(std_no,4,1)='7') then 'H' 
    end as GroupName,city_id, 
    count(*) as PostCount 
    from imei_tb 
    where reg_date>='2017-01-06' 
    and reg_date<='2017-01-10' 
    and length(std_no)='10' 
    GROUP BY GroupName,city_id 
    ORDER BY city_id ASC 

有没有什么解决方案,使这个查询加快查询? 在此先感谢

+0

提供'SHOW CREATE TABLE imei_tb'的输出 –

回答

1

`INDEX(reg_date)可能是唯一有用的索引。

你被迫做2种 - 一种为GROUP BY,另一种为ORDER BY

一旦我看到SHOW CREATE TABLE imei_tb,我想我可以给你一个改进的查询使用子查询。