2017-02-14 9 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)は唯一の有用なインデックスです。

GROUP BYの場合は1つ、ORDER BYの場合は2つの種類があります。

私がSHOW CREATE TABLE imei_tbを見ると、サブクエリを使用して改善されたクエリを提供できるようになります。