[英]My CTE SQL Query is running for too long....How can I optimize?
我正在寻找优化查询性能的方法,但我不确定我的选择是什么。 我希望有人可以指导我。 这是我的 CTE 查询:
WITH Sales AS
(
SELECT
DISTINCT s.id,
o.item,
o.sku
FROM sales s
LEFT JOIN orders o
ON s.id = o.id
WHERE
o.item LIKE 'iphone%'
AND SUBSTRING(o.item, 1, 4) = 'iphone'
ORDER BY s.id ASC, o.item DESC
)
SELECT
COUNT(DISTINCT Sales.id) AS this,
m.date,
COUNT(DISTINCT m.z)
FROM Sales
LEFT JOIN master m
ON Sales.id = m.id
WHERE
LOWERCASE(m.id) LIKE '%ipad%'
AND LOWERCASE(Sales.id) NOT LIKE '%pod%'
GROUP BY m.date
HAVING
m.date > date_start AND m.date < date_end
ORDER BY this ASC
LIMIT 10
设置条件
m.date > date_start AND m.date < date_end
从 have 到 where 子句...
如果可能,请尝试删除 where 子句中列中的强制转换 LOWERCASE 并将表/列设置为不区分大小写的排序规则
SUBSTRING(o.item, 1, 4) = 'iphone'
总是会失败。 也许你的意思是6?
WHERE LOWERCASE(m.id) LIKE '%ipad%'
AND LOWERCASE(Sales.id) NOT LIKE '%pod%'
建议您了解FULLTEXT
索引和使用
WHERE MATCH(m.id) AGAINST("+ipad" IN BOOLEAN MODE)
id
真的是这样的字符串吗? (约定是id
是定义行的唯一编号。)
HAVING m.date > date_start
AND m.date < date_end
似乎应该在WHERE
子句中。 在这一点上LEFT
没有意义。
ON Sales.id = m.id
为什么要在WHERE
分别测试每个? 如果它们相同,您可以测试一个。
清理那些东西; 然后我们可以讨论索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.