【发布时间】:2021-04-24 17:54:25
【问题描述】:
我正在尝试优化 SQL 查询以提高其执行速度。我已经发现 Date 列是问题所在。当我运行此查询时,包括数据库中的日期:
SELECT p.*, preis.preis
FROM produkt p INNER JOIN (SELECT * FROM preis WHERE DATE(preis.Datum) = CURDATE()) preis ON p.id = preis.produkt_id
WHERE artikel_id IN (SELECT artikel_id FROM produkt WHERE haendler_id = 1)
需要 28 秒才能得到结果。但是当我将 INNER JOIN 选择的 WHERE-Clause 更改为 id > 256981 时,我得到相同的结果,它只需要 0,062 秒。
SELECT p.*, preis.preis
FROM produkt p INNER JOIN (SELECT * FROM preis WHERE preis.id > 256981) preis ON p.id = preis.produkt_id
WHERE artikel_id IN (SELECT artikel_id FROM produkt WHERE haendler_id = 1)
这是一个很大的不同。
我已经阅读了一些关于 INDEX 和不同 INDEX 类型的内容,但是我找不到以正确方式对 DATE 字段进行 INDEX 的解决方案。 或者还有其他方法可以改进这样的查询吗?
【问题讨论】:
-
那么在日期列上创建索引有什么问题呢?
-
@ClausBönnhoff 我在日期字段中添加了一个普通索引,但它不影响查询时间,仍然需要大约 28 秒。所以我问我是否需要一个特殊的日期列
-
在查询之前创建一个今天的日期,然后像 WHERE preis.Datum = '2021-01-20' 一样使用它