情况1:

强制类型转换的情况下,不会使用索引,会走全表扫描。

举例如下:

首先我们创建一个表

CREATETABLE`test`(`id`int(11)NOTNULLAUTO_INCREMENT,`age`int(11)DEFAULTNULL,`score`varchar(20)NOTNULLDEFAULT'',PRIMARYKEY(`id`),KEY`idx_score`(`score`))ENGINE=InnoDBAUTO_INCREMENT=12DEFAULTCHARSET=utf8

然后我们给这个表里面插入一些数据,插入数据之后的表如下:

mysql:yeyztest 21:43:12>>select*fromtest;+----+------+-------+|id|age|score|+----+------+-------+|1|1|5||2|2|10||5|5|25||8|8|40||9|2|45||10|5|50||11|8|55|+----+------+-------+7rowsinset(0.00sec)
explain select * from test where score ='10';explain select * from test where score =10;
mysql:yeyztest21:42:29>>explainselect*fromtestwherescore='10';+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+|1|SIMPLE|test|NULL|ref|idx_score|idx_score|62|const|1|100.00|NULL|+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+1rowinset,1warning(0.00sec)mysql:yeyztest21:43:06>>explainselect*fromtestwherescore=10;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+|1|SIMPLE|test|NULL|ALL|idx_score|NULL|NULL|NULL|7|14.29|Usingwhere|+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+1rowinset,3warnings(0.00sec)

情况2:

反向查询不能使用索引,会导致全表扫描。

创建一个表test1,它的主键是score,然后插入6条数据:

CREATETABLE`test1`(`score`varchar(20) not null default '' ,PRIMARYKEY(`score`))ENGINE=InnoDBDEFAULTCHARSET=utf8mysql:yeyztest22:09:37>>select*fromtest1;+-------+|score|+-------+|111||222||333||444||555||666|+-------+6rowsinset(0.00sec)
explain select * from test1 where score='111';explain select * from test1 where score!='111';

情况3:

某些or值条件可能导致全表扫描。

首先我们创建一个表,并插入几条数据:

CREATETABLE`test4`(`id`int(11)DEFAULTNULL,`name`varchar(20)DEFAULTNULL,KEY`idx_id`(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf81rowinset(0.00sec)mysql--dba_admin@127.0.0.1:yeyztest22:23:44>>select*fromtest4;+------+------+|id|name|+------+------+|1|aaa||2|bbb||3|ccc||4|yeyz||NULL|yeyz|+------+------+5rowsinset(0.00sec)
explain select * from test4 where id=1;explain select * from test4 where id is null;explain select * from test4 where id=1 or id is null;

简单总结一下:

1.强制类型转换的情况下,不会使用索引,会走全表扫描

2.反向查询不能使用索引,会导致全表扫描。

3.某些or值条件可能导致全表扫描。

更多相关文章

  1. Android上的模拟点击
  2. Android(安卓)获取存储卡路径和空间使用情况
  3. Error:Uncaught translation error: com.android.dx.cf.code.Sim
  4. Android(安卓)后台线程调用前台线程的几种方法
  5. 我今天的面试题,注册广播有几种方式,这些方式有何优缺点?请谈谈Andr
  6. Android(安卓)代码设置Color的几种方式
  7. JS判断终端类型的几种方法
  8. 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法
  9. Android中的几种网络请求方式详解

随机推荐

  1. TextView常用属性
  2. 《Android攻防实战》读书笔记——Android
  3. Android(安卓)Toast使用简介
  4. android中的数据库操作
  5. android新闻App源码、仿微信源码、地图音
  6. Ice Cream Sandwich系统将统一Android版
  7. (window)Android Studio安装以及Fetching
  8. android当中的xml没有代码提示功能解决办
  9. Android:TextView属性
  10. [Android 与 js 简单互调