mysql - 任何人都可以告诉我为什么我的查询需要永远运行吗?
问题描述
谁能告诉我为什么我的查询需要永远运行?我想确保我的查询没有任何问题会减慢进程。
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'
知道如何改进或使其更快吗?
太感谢了
解决方案
OR
通常会阻止使用任何索引。- 不要将日期转换为
DATE
- 我假设DateCreated
已经是DATE
orDATETIME
,如果没有CONVERT()
. - 摆脱
CONVERT
,INDEX(InvoiceIDByStore, DateCreated)
onPD
可能会有很大帮助。 - 请提供
SHOW CREATE TABLE
,以便我们查看您是否有合适的索引。 - 请限定所有列名(使用时
JOIN
),以便我们知道它们在哪个表中(例如DefaultVendorName
:) - 请提供
EXPLAIN
。 - 我认为没有必要
WITH
;似乎大SELECT
的WITH
可以变成一个“派生表”。EXPLAIN
看看是否保持不变会很有趣。
推荐阅读
- python - 如何在循环中创建一个包含我想要的数字的列表?
- java - Bigquery 查询 API - 数组问题
- java - 使用页面工厂设计模式在页面对象中第二次调用 web 元素会给出过时元素异常
- java - 当收集子类的最后一个实例时,是否会收集抽象超类垃圾?
- c++ - 指针越界导致分段错误c ++
- c# - 将 enum 作为函数参数传递,将其作为 int 处理,并返回 enum
- html - 如何通过 $http.get() 从 .json 文件获取数据到 html 文件
- javascript - 单击按钮时更改视图
- python - Spotipy-为什么在获取保存的歌曲时有 50 首歌曲的限制?
- r - 使用R中的for循环填充要列出的数据框