Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 创建月和年列以加快时间戳查询_Mysql_Mariadb - Fatal编程技术网

Mysql 创建月和年列以加快时间戳查询

Mysql 创建月和年列以加快时间戳查询,mysql,mariadb,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 K

我在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'
WHERE dateCreated>=“2016-09-01 00:00:00”
创建日期<'2016-10-01 00:00:00'
和用户='1234'

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

WHERE dateCreated >= '2016-09-01 00:00:00' 
   AND dateCreated < '2016-10-01 00:00:00' 
   AND user = '1234'
WHERE dateCreated>=“2016-09-01 00:00:00”
创建日期<'2016-10-01 00:00:00'
和用户='1234'

以两种方式对其进行基准测试。创建/维护列的开销可能远远超过缓存数据的任何好处。PK是表中不存在的列。明亮的无论如何,将日期存储为日期。并使用范围查询。以两种方式对其进行基准测试。创建/维护列的开销可能远远超过缓存数据的任何好处。PK是表中不存在的列。明亮的无论如何,将日期存储为日期。并使用范围查询。我是否需要为dateCreated和user编制索引?我所做的更改具体取决于
dateCreated
上的索引是否有用;但是在
用户
上设置一个,或者在两个字段上同时设置一个,也会有所帮助。从更大的角度来看,这实际上取决于您希望如何定期查询数据。例如,
(dateCreated,user)
索引在基于
用户
而没有
dateCreated
进行查询的情况下不会有帮助,但如果您希望在
dateCreated
而没有
用户
的情况下经常进行查询,则仍然会有帮助。如果您重新排序该索引:
(user,dateCreated)
。首先是常量测试,然后是范围。我需要索引dateCreated和user吗?我所做的更改特别依赖于
dateCreated
上的索引才有用;但是在
用户
上设置一个,或者在两个字段上同时设置一个,也会有所帮助。从更大的角度来看,这实际上取决于您希望如何定期查询数据。例如,
(dateCreated,user)
索引在基于
用户
而没有
dateCreated
进行查询的情况下不会有帮助,但如果您希望在
dateCreated
而没有
用户
的情况下经常进行查询,则仍然会有帮助。如果您重新排序该索引:
(user,dateCreated)
。首先进行常数测试,然后是量程测试。