mysql
  • sql
  • 2016-12-09 14 views -1 likes 
    -1

    mysqlのクエリ、クエリに時間がかかりすぎて最適化する方法がありますか?

    は親切に私が事前に速く

    SELECT max("Domain"), 
     
    max("LIcenseGen"), 
     
    max("Product"), 
     
    if(max("Domain") in 
     
          (select "Domain" 
     
          from "qAllCustomerDomain" 
     
          where "USERTYPE" != 'Registered'),'No','Yes') as 'LicenseStatus' 
     
    FROM "qRegistered" group by "Domain","LIcenseGen"

    おかげ

    +0

    条件付きのif行をコメントアウトしてパフォーマンスが向上するのでしょうか? "License Status"として "(max(" Domain ")in(" qAllCustomerDomain "から" Domain "を選択した場合、" USERTYPE "!= 'Registered')、 'No'、 'Yes')"をドラッグすると、 " –

    +1

    "その代わりにJOINを使用してください – GrApDev

    +0

    GAが言ったこと - mysqlはサブクエリを処理するのが悪いと悪評されています。 –

    答えて

    1

    ドメインとユーザータイプにインデックスを追加してみてください。それはあなたの質問を大いに加速させるはずです

    1

    それがで示唆されたとして、クエリの実行を行うために作ることができるの変更で私を助けてコメント

    select main.* 
         if (reg.Domain is NULL,'No','Yes') as 'LicenseStatus' 
    from 
        (SELECT max("Domain") as max_domain, 
          max("LIcenseGen"), 
          max("Product") 
        FROM "qRegistered" 
        group by "Domain","LIcenseGen") main 
        LEFT JOIN (select "Domain" 
          from "qAllCustomerDomain" 
          where "USERTYPE" != 'Registered' 
        ) reg on main.max_domain=reg.Domain 
    
    +0

    IFの代わりに、すべてのSQLエンジンで移植可能にするには、 'CASE'、' WHEN'、 'THEN'、' ELSE'を使用することが望ましいでしょう。 – Stavr00

    +0

    @ Stavr00私は同意します。私はCASE/WHENを使用することを好むが、この場合はIFが既に使用されているので、著者の理解が容易になる – StanislavL

    関連する問題