EVENT_TIME是一个索引日期时间列(下面的表定义)。几乎所有的查询都基于EVENT_TIME列。我需要各种各样的选项(例如,分组,DATE(EVENT_TIME),HOUR(EVENT_TIME)等)来建立我的查询。
不确定为什么=和(和DATE(EVENT_TIME))条件之间存在巨大差异,如下所述。
有任何建议可以查询最快的方式每天 -DATE(EVENT_TIME =今天()),过去4小时等
select * from 4gc_1h_atch_enb where EVENT_TIME='2014-04-08 00:00:00'
60743行返回
0.062秒/3.229秒
select * from 4gc_1h_atch_enb where EVENT_TIME like '2014-04-08 00:00:0%'
60743行返回
449.875秒/ 7.988秒
select * from 4gc_1h_atch_enb where date(EVENT_TIME)='2014-04-08' and time(event_time)='00:00:00'
60743行返回
401.094秒/ 9.063秒
表格定义
mysql> show create table 4gc_1h_atch_enb \G
*************************** 1. row **********************
Table: 4gc_1h_atch_enb
Create Table: CREATE TABLE `4gc_1h_atch_enb` (
`ELEMENT_TYPE` varchar(32) NOT NULL,
`NE_VERSION` varchar(32) NOT NULL,
`NE_ID` int(10) unsigned DEFAULT NULL,
`NE_NAME` varchar(32) NOT NULL,
`EVENT_TIME` datetime DEFAULT NULL,
`ENB` varchar(32) NOT NULL,
.
.
.
TRUNCATED FOR READABILITY
.
.
.
`MarketName` varchar(32) NOT NULL,
KEY `iNE_VERSION` (`NE_VERSION`),
KEY `iNE_ID` (`NE_ID`),
KEY `iNE_NAME` (`NE_NAME`),
KEY `iEVENT_TIME` (`EVENT_TIME`),
KEY `iENB` (`ENB`),
KEY `iMarketName` (`MarketName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql>
答案 0 :(得分:1)
如果使用=
或BETWEEN
MySQL可以使用索引,请参阅http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html。如果您使用LIKE
或DATE
,则结果将是计算字段,MySQL将不使用索引。
使用EXPLAIN
检查不同查询的执行计划,请参阅http://dev.mysql.com/doc/refman/5.5/en/using-explain.html