mysql - 创建月份和年份列以加快时间戳查询

标签 mysql mariadb

我在 mariadb/mysql 中有一个很大的日志表:

CREATE TABLE `logs` (
    `id` CHAR(36) NOT NULL,
    `user` CHAR(4) NOT, NULL,
    `dateCreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `dateUpdated` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB

我正在尝试根据按月和年创建的用户和日期查询日志:

select * from logs where month(dateCreated) = '9' and year(dateCreated) = '2016' and user = '1234'

问题: 我是否应该创建两个名为月和年的列,并为月、年和用户建立索引以加快查询速度?

最佳答案

您最好只重构查询条件以更好地利用字段上可能的索引:

WHERE dateCreated >= '2016-09-01 00:00:00' 
   AND dateCreated < '2016-10-01 00:00:00' 
   AND user = '1234'

关于mysql - 创建月份和年份列以加快时间戳查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358134/

相关文章:

php - 使用nodeMCU在mysql中写入dht11传感器失败

php - 如果存在具有 2 列值的记录,则忽略插入

php - 从 Wordpress 用户元表中获取数据

sql - Django 中的第一个查询总是很慢

mysql - 是否有打开/关闭 general_log 全局设置的查询?

mysql - 计入查询破坏预期结果

mysql - mysql中的子查询定界符

docker - Docker 虚拟卷对于 MariaDB 读/写操作是否足够快?

mysql - 使用运算符IN的Golang MongoDB更新查询

mysql 按 bigint 和主键(id)分区