zoukankan      html  css  js  c++  java
  • 【转】同一个SQL查询语句,为什么使用到的索引不同?

    问:

    同一个SQL查询语句,只是修改where条件中的一个值,为什么使用到的索引情况也会不同?谢谢!

    1) explain执行结果,如下图:


    2) 表中的数据如下图:



    3) 表结构如下图:



    4) 创建的索引如下图:


     
     
     
    答:

    前提:
    1.mysql用中索引是btree索引,也就是说索引是平衡二叉树结构
    2.你用的语句是select *

    以下为分析
    统计信息已经告诉你了
    在条件是20150323时
    预估行数是4


    在条件是20150326时
    预估行数是1


    那么,我们知道,这个索引的Btree的查找数据为1条时,最多2次就可以定位到数据,由于你是select *,所以需要取得主键后去数据页取*的数据,这个也是一个二叉树查找,最多需要2次操作(针对你的表最多也就是2次查找了),也就是说在取一条记录时,查找次数是大概是2+2=4次

    在预估4行的情况下,mysql会判断为使用索引的情况下需要4*4=16次查找操作,但是这时候扫描表的话(你的表很小,肯定所有数据在一个数据页上)只需要1个扫描就完成了,但是由于按主键扫描时候不是按code排序,所以会有sort操作

    mysql的优化器是基于cost的,会选择消耗小的计划

    所以有了你给出的查询计划

    如果你把select *改成select create_date,这个查询就会使用索引了,但是10有89也是个扫描操作,实在是懒的测试了……
     
    from:https://www.zhihu.com/question/28997400
  • 相关阅读:
    Mysql 怎么限制 IP 访问?
    LA2965 n个数中选出最多个数异或和为0
    UVALive 2678 大于s的最短子序列和
    UVA 1193 区间相关(greedy)
    UVA 11992 线段树
    UVA 1400 线段树
    NBUT 1120 线段树
    最大连续区间和的算法总结(转)
    hiho 1015 KMP
    hiho#1128 : 二分·二分查找
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/7390048.html
Copyright © 2011-2022 走看看