谁能告诉我为什么我的查询永远需要运行?

时间:2019-06-28 22:57:39

标签: mysql query-optimization mysql-workbench

有人可以告诉我为什么我的查询永远需要运行吗?我想确保我的查询没有问题,从而减慢了该过程。

 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 :(得分:0)

  • OR通常会阻止使用任何索引。
  • 不要将日期转换为DATE -我假设DateCreated已经是DATEDATETIME,如果没有CONVERT(),它就可以正常工作。
  • 摆脱CONVERT之后,INDEX(InvoiceIDByStore, DateCreated)上的PD可能会大有帮助。
  • 请提供SHOW CREATE TABLE,以便我们查看您是否有合适的索引。
  • 请限定所有列名(使用JOIN时),以便我们知道它们位于哪个表中(例如:DefaultVendorName
  • 请提供EXPLAIN
  • 我认为不需要WITHSELECT中的大WITH似乎可以变成“派生表”。看看EXPLAIN是否保持不变会很有趣。