【转】同一个SQL查询语句,为什么使用到的索引不同?
问:
同一个SQL查询语句,只是修改where条件中的一个值,为什么使用到的索引情况也会不同?谢谢!
1) explain执行结果,如下图:
2) 表中的数据如下图:

3) 表结构如下图:

4) 创建的索引如下图:

前提:
1.mysql用中索引是btree索引,也就是说索引是平衡二叉树结构
2.你用的语句是select *
以下为分析
统计信息已经告诉你了
在条件是20150323时
预估行数是4
<img src="https://pic2.zhimg.com/515926fd0985d10dc1da90f9fe2b4f09_b.jpg" data-rawwidth="77" data-rawheight="54" class="content_image" width="77">
在条件是20150326时
预估行数是1
<img src="https://pic3.zhimg.com/bccccc4f59d74e34c2289e3420963516_b.jpg" data-rawwidth="84" data-rawheight="48" class="content_image" width="84">
那么,我们知道,这个索引的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也是个扫描操作,实在是懒的测试了……
【转】同一个SQL查询语句,为什么使用到的索引不同?的更多相关文章
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
- 经典SQL查询语句大全
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- SQL查询语句分类
SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...
- SQL查询语句大全及其理解
转自:https://www.cnblogs.com/1234abcd/p/5530314.html 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删 ...
- 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号
在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...
- SQL查询语句大全集锦
SQL查询语句大全集锦 一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例如,下面的语句查询t ...
- MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?
一条SQL查询语句是如何执行的? 前言 大家好,我是WZY,今天我们学习下MySQL的基础框架,看一件事千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MyS ...
- mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?
本文基于----MySQL实战45讲(极客时间----林晓斌 )整理----->https://time.geekbang.org/column/article/68319 一.第一节:一条sq ...
- 1 基础架构:一条sql查询语句如何执行?
1 基础架构:一条sql查询语句如何执行? 分析一个最简单的查询 mysql> select * from T where ID=10: MySQL基本架构示意图 大体来说,mysql可以分为s ...
随机推荐
- [Luogu 3787] 冰精冻西瓜
Description 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃. 这些西瓜蔓具有神奇的性质, ...
- Josephus Problem的详细算法及其Python、Java实现
笔者昨天看电视,偶尔看到一集讲述古罗马人与犹太人的战争--马萨达战争,深为震撼,有兴趣的同学可以移步:http://finance.ifeng.com/a/20170627/15491157_0. ...
- Dynamics CRM 2016/365 窗体中添加按钮
一.工具下载,及界面介绍 1.下载XrmToolBox工具(XrmToolBox for Microsoft Dynamics CRM/365 CE) 链接:https://www.xrmtoolbo ...
- c# UTF-16转UTF-8 互转
/// <summary> /// UTF-16转UTF-8 /// </summary> /// <param name="str">< ...
- Hadoop小知识点总结1
1.数据仓库warehouse一般不做更改,只做查询 2.OLTP:联机事务处理,比如:转账 OLAP:联机分析处理,比如:只做查询 3.hadoop的思想来源: GFS (Google的文件系统)即 ...
- ArrayList和LinkedList的区别以及优缺点
作用 ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用.他们都可以对元素的增删改查进行操作. 对于ArrayList,它在集合的末尾删除或添加元素所用的 ...
- 【Dubbo&&Zookeeper】3、Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd'问题解决方法
转自:http://blog.csdn.net/gaoshanliushui2009/article/details/50469595 我们公司使了阿里的dubbo,但是阿里的开源网站http://c ...
- I want to learn Android Development, where do I start?
Question: But I completely have no idea what I wanted to make. I just would like to study android.Wo ...
- Android基础系列合集
四大组件 1.Service Android四大组件-Service Android-远程Service Service 动态更新 UI 2.Activity Android四大组件-Activity ...
- agc023C - Painting Machines(组合数)
题意 题目链接 有\(n\)个位置,每次你需要以\(1 \sim n-1\)的一个排列的顺序去染每一个颜色,第\(i\)个数可以把\(i\)和\(i+1\)位置染成黑色.一个排列的价值为最早把所有位置 ...