首页 > 解决方案 > 如何在sql中为日期时间字段应用索引

问题描述

我正在尝试从特定日期范围中删除记录。

所以我使用了以下查询

delete from `table_name` where `date`<1580947200

我使用 datetime 作为date列的数据类型

执行需要很长时间,有时在执行此查询时会卡住。

谁能说如何为这个查询应用索引

标签: mysql

解决方案


您的问题不是索引。您的问题是您告诉 MySQL将非数字(DATETIME)列与数值(Unix 时间戳)进行数字比较。

我使用日期时间作为日期列的数据类型

这意味着该列是一DATETIME列。但;

1580947200

在我看来就像一个 Unix Timestamp 值。

Unix TimestampMySQL DateTime 实体不同。

所以; 您需要将这两种类型转换为相同的类型以进行比较;为此,您可以使用UNIX_TIMESTAMP()MySQL 函数。

DELETE FROM `table_name` WHERE UNIX_TIMESTAMP(`date`) < 1580947200 

如果您确实希望为该date列添加索引,您可以阅读此问答


推荐阅读