【问题标题】:mysql datetime indexed column - varied query response timemysql datetime 索引列 - 不同的查询响应时间
【发布时间】:2014-04-08 16:12:19
【问题描述】:

EVENT_TIME 是一个索引日期时间列(下面的表定义)。而且我几乎所有的查询都基于 EVENT_TIME 列。我需要多种选项(如介于、分组、DATE(EVENT_TIME)、HOUR(EVENT_TIME) 等)来作为查询的基础。

不知道为什么下面提到的 = 和 (like and DATE(EVENT_TIME)) 条件之间存在巨大差异。

关于查询最快方式的任何建议每天-DATE(EVENT_TIME=today())、过去 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>

【问题讨论】:

    标签: mysql datetime select indexing datetime-format


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      相关资源
      最近更新 更多