我正在尝试优化此查询的速度:
SELECT t.t_date td, v.visit_date vd
FROM temp_dates t
LEFT JOIN visits v ON DATE_FORMAT(v.visit_date, '%Y-%m-%d') = t.t_date
ORDER BY t.t_date
v.visit_date 是 DATETIME 类型,t.t_date 是格式为 '%Y-%m-%d' 的字符串。简单地在 v.visitdate 上创建索引并没有提高速度。因此,我打算尝试@oysteing 在这里给出的解决方案:
How to optimize mysql group by with DATE_FORMAT
我成功地通过此 SQL 创建了一个虚拟列
ALTER TABLE visits ADD COLUMN datestr varchar(10) AS (DATE_FORMAT(visit_date, '%Y-%m-%d')) VIRTUAL;
但是当我尝试在此列上创建索引时,
CREATE INDEX idx_visit_date on visits(datestr)
我收到此错误:
#1901 - 函数或表达式 'date_format()' 不能在 GENERATED ALWAYS AS 子句中使用
datestr
我究竟做错了什么?我的数据库是 Maria DB 10.4.8
最好的问候 - 乌尔里希