mysql datetime索引列 - 不同的查询响应时间

时间:2014-04-08 16:12:19

标签: mysql datetime select indexing datetime-format

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>

1 个答案:

答案 0 :(得分:1)

如果使用=BETWEEN MySQL可以使用索引,请参阅http://dev.mysql.com/doc/refman/5.5/en/column-indexes.html。如果您使用LIKEDATE,则结果将是计算字段,MySQL将不使用索引。

使用EXPLAIN检查不同查询的执行计划,请参阅http://dev.mysql.com/doc/refman/5.5/en/using-explain.html