admin

如何使用DATE_FORMAT优化mysql组

sql

我有一个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


阅读 277

收藏
2021-07-01

共1个答案

admin

您可以创建一个生成的列,并在该列上创建索引:

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;
2021-07-01