zoukankan      html  css  js  c++  java
  • Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用

    Mysql: mysql between 日期索引 索引问题-日期索引使用

    表结构:

    dep_date 

    dep

    arr

    联合索引: ind_coll_date_route  (dep_date ,dep,arr)

    这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引, 
    我的索引是日期类型的,首先想到的是mysql对日期类型的索引的处理机制是不是不同,在where条件里试了几种,发现效果都差不多,

    where dep_date >= ‘20161121’ 
    where dep_date  >= ‘2016-11-21’ 
    where dep_date  between ‘2016-11-01’ and ‘2016-11-21’

    还有各种函数,最后发现结论都是一样的,在baidu上查询也没有有价值的内容。

    最后发现了一些规律,但不知道是否有普遍性,即:

    在查询数据条数约占总条数五分之一以下时能够使用到索引,但超过五分之一时,则使用全表扫描了。

    试了多张表,均是这个结论, 所以想这个五分之一应该是在某一个地方设置的,或者是系统默认在查询优化时的一个经验值,在以后的处理的进修引起注意。

    解决办法:

    强制走索引

    SELECT * 
    FROM  `table_xxx` 
    FORCE INDEX ( ind_coll_date_route ) 
    WHERE 
    dep_date BETWEEN '2017-12-01' AND '2017-12-30'

      

    虽然走了强制索引,但实际上依然很慢。这主要还是数据量大或者并没有真正走到索引上。

    当数据量大,这样的联合索引:ind_coll_date_route  (dep_date ,dep,arr) 日期就走的很慢,经过多少发现这是mysql的一个bug,

    后将联合索引改成:ind_coll_date_route  (dep,arr,dep_date)  ,速度快了很多,并且也走了索引。

  • 相关阅读:
    centos7.3 安装 mysql5.7.13
    linux下MySQL的启动与访问
    使用jquery修改display属性
    浏览器在线预览pdf、txt、office文件
    查看java的jar包源码
    邮件群发器
    公司招聘asp.net程序员(已过期)
    javascript面向对象,实现namespace,class,继承,重载
    javascript window.close() 去掉那讨厌的确认对话框
    如果注定要分别
  • 原文地址:https://www.cnblogs.com/achengmu/p/8010777.html
Copyright © 2011-2022 走看看