Любое тело, пожалуйста, скажите мне, почему мой запрос выполняется вечно? - PullRequest
0 голосов
/ 29 июня 2019

Может кто-нибудь сказать, почему мой запрос выполняется вечно?Я хочу убедиться, что с моим запросом все в порядке, что замедляет процесс.

 WITH TradeIn AS 
    (
        SELECT  CONVERT(ID.DateCreated, DATE) 'Invoice Date' , ID.InvoiceIDByStore ,
                ID.InvoicedAt , ID.EmployeeName , ID.TenderedBy , ID.CustomerName ,
                ID.ProductIdentifier , ID.ProductName , ID.SerialNumber ,
                ID.Quantity , ID.TotalPrice
            FROM  simplymacstaging.productdetail ID
            LEFT JOIN  simplymacstaging.productmasterlist PM 
                  ON PM.ProductSKU = ID.ProductIdentifier
            WHERE  CONVERT(ID.DateCreated, DATE) >= '2014-01-01'
              AND  CONVERT(ID.DateCreated, DATE) <= '2014-12-31'
              AND  ID.InvoicedAt IN ('100 Park City', '101 Orem', '102 Fort Union',
                        '105 St. George', '106 Foothill'
                          )
              AND  DefaultVendorName IN ('Simply Mac Trade In', 'Phobio')
              OR  ProductIdentifier IN ('ISATNS000001','ISATRB000003',
                        'ISPHNR000007','COMINS001595','COMIRB001597','ISPHNS000003',
                        'COMINS001415','ISPHRB000004','COMIRB001416','ISPHTL000006',
                        'IABUAP000004','IABUAP000003','MIMICE000035','MIMICE000426',
                        'MIMICE000427','IABUAP000006','COMIAP000007','COMICE000011')
    ) 
SELECT  *
    FROM  simplymacstaging.productdetail PD
    INNER JOIN  TradeIn TD  ON TD.InvoiceIDByStore = PD.InvoiceIDByStore
    WHERE  CONVERT(PD.DateCreated, DATE) >= '2014-01-01'
      AND  CONVERT(PD.DateCreated, DATE) <= '2014-12-31'

Есть идеи, как это улучшить или сделать быстрее?

Большое вам спасибо

1 Ответ

0 голосов
/ 29 июня 2019
  • OR часто запрещает использование каких-либо индексов.
  • Не конвертируйте даты в DATE - я полагаю, DateCreated - это уже DATE или DATETIME, что бы нормально работать без CONVERT().
  • После избавления от CONVERT, INDEX(InvoiceIDByStore, DateCreated) на PD, вероятно, очень поможет.
  • Пожалуйста, укажите SHOW CREATE TABLE, чтобы мы могли увидеть, есть ли у вас подходящий индекс (ы).
  • Пожалуйста, укажите все имена столбцов (при использовании JOIN), чтобы мы знали, в какой таблице они находятся (например: DefaultVendorName)
  • Пожалуйста, предоставьте EXPLAIN.
  • Не вижу необходимости в WITH; кажется, что большой SELECT в WITH можно превратить в «производную таблицу». Было бы интересно посмотреть, останется ли EXPLAIN прежним.
...