记一次sql慢查询

项目中需要记录一个时间序列键值数据,同时需要查找最近的一次记录,所以有如下sql:
SELECT MAX(ts) AS ts FROM lpd_stat WHERE metric = ‘load’ AND ts like ‘2017-07-02 10%’
metric为键,ts为时间点,类型为DATETIME,上述sql用来找出键为“load”的最近的时间。
lpd_stat中有2千多万条记录,建立了(metric, ts)的组合索引,explain时发现此sql使用了索引,但是查询时间为10几秒,所以怀疑ts并没有使用索引,改为如下查询:
SELECT MAX(ts) AS ts FROM lpd_stat WHERE metric = ‘load’ AND ts>=’2017-07-02 10:00:00’
运行后发现只需70几毫秒,所以可以证明确实没有走索引,为什么呢?
经过各种查询,得知mysql中DATETIME的存储格式并非字符串,而是8字节的数字,具体见 https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
所以千万记住时间like是不会走索引的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值