我有一个SQL。
select count(id) as total, DATE_FORMAT(create_time,"%Y-%m-%d") as create_date from table_name group by DATE_FORMAT(create_time,"%Y-%m-%d");
然后定义create_time列。
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
据我所知,函数 DATE_FORMAT 不采用索引,因此我的执行速度非常慢。有什么方法可以对其进行优化吗?
mysql版本:5.6.34
您可以创建一个生成的列,并在该列上创建索引:
ALTER TABLE table_name ADD COLUMN create_date DATE AS (DATE(create_time)) VIRTUAL; CREATE INDEX idx ON table_name(create_date);
由于生成的列是虚拟的,因此它将不使用任何空间。(但是,索引当然会使用额外的空间。)然后,您可以在查询中使用此生成的列:
SELECT COUNT(*), create_date FROM t2 GROUP BY create_date;