我是小羊同学,一个兢兢业业的程序员

背景:有一天同事突然问我为什么加了in查询就突然变慢了、小羊脱口而出:“in不走索引!” 于是就炸开了锅:in不走索引!怎么可能? 但是在小羊同学脑子里、in不走索引为什么早就根深固体了?原因暂且不说,我们来探索真像。

环境:Windows10、MySQL5.7、可视化工具navicat。

场景1:当IN中的取值只有一个主键时

我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:

type:连接类型(建议记到小本本上)

  • system:表只有一行记录,相当于系统表

  • const:通过索引一次就找到,只匹配一行数据

  • eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配

  • ref:非唯一性索引扫描,返回匹配某个单独值的所有行用于=、 操作符带索引的列

  • range:只检索给定范围的行,使用一个索引来选择行一般使用 between、

  • index:只遍历索引树

  • ALL:全表扫描,性能最差

场景2:扩大IN中的取值范围

此时仍然走了索引,但是效率明显降低了

场景3:继续扩大IN的取值范围

发现此时已经没有走索引了,而是全表扫描

结论:

当数据量很大的时候,in("大量数据"),in 查询走索引也许不是最好的

但是!

当查询的列是char类型,必须加""号才可走索引,否则导致全表扫描,会随着表的增大而变得更慢

结论:

  • 当in()中的数据很大时,不走索引

  • 当查询的列是char类型没有加引号,mysql优化器会自动给填充引号,同时也会导致索引失效

  • 当in()中存在子查询、格式化函数等同样也会使索引失效!

end

*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

好文!必须在看

查询没有走索引_关于MySQL种的in函数到底走不走索引、我和同事差点大打出手!...相关推荐

  1. mysql in 索引_关于MySQL种的in函数到底走不走索引、我和同事差点大打出手!

    " 我是小羊同学,一个兢兢业业的程序员" 背景:有一天同事突然问我为什么加了in查询就突然变慢了.小羊脱口而出:"in不走索引!" 于是就炸开了锅:in不走索引 ...

  2. mysql1000w数据怎么加索引_给mysql一百万条数据的表添加索引

    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...

  3. mysql查询是否走索引_探索MySQL是否走索引(一)——范围查询一定走索引吗?

    首先,准备4个版本的数据库,5.5/5.6/5.7/8.0 然后,每个库中有一模一样的表,数据量一样,建立的索引一样,InnoDB引擎. 先看一看,各个版本中,索引统计信息(Cardinality代表 ...

  4. mysql子查询为什么不走索引_解决MySQL中IN子查询会导致无法使用索引问题

    测试表如下: CREATE TABLE`test_table` ( `id`int(11) NOT NULLAUTO_INCREMENT, `pay_id`int(11) DEFAULT NULL, ...

  5. 数据库mysql建立索引_为mysql数据库建立索引

    前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...

  6. mysql5.6 函数索引_聊聊MySQL中的索引

    关于MySQL中的索引使用 索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题. 索引的存储分类: 1.B-Tree索引:最常见的索引类型,大部分引擎都支 ...

  7. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

  8. mysql为什么使用b 树作为索引_为什么Mysql用B+树作为索引

    该篇文章已经投稿给公众号hollis 1.什么是索引 索引这个词,相信大多数人已经相当熟悉了.不过为了文章的完整性,这里再啰嗦一下.索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的 ...

  9. 覆盖索引与联合索引_浅析MySQL的索引覆盖和索引下推

    写在前面 在MySQL数据库中,索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点,索引就是为了提高数据查询的效率.今天我们来聊聊在MySQL索引优化中两种常见的方式,索引覆盖和 ...

最新文章

  1. RapidJSON简介及使用
  2. Python学习之路 (一)开发环境搭建
  3. 2013.11.13
  4. 20161023 NOIP 模拟赛 T1 解题报告
  5. 观察者模式重复调用mysql问题,2、观察者模式
  6. 【分解质因数】【树状数组】【快速幂】codeforces 2014 ACM-ICPC Vietnam National Second Round E. ACM...
  7. github推送错误:已经有此代码,不允许覆盖的解决方法
  8. struts2对action的指定方法进行校验
  9. 解决:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.
  10. 二级c语言编程案例,2011年计算机二级考试C语言经典程序设计100例(7)
  11. python网络爬虫学习笔记(八):XPath的使用
  12. python的wget用法介绍_Python使用wget实现下载网络文件功能示例
  13. 计算机网络同传步骤,HP网络同传使用方法Word版
  14. Overlay network
  15. python公式字体_Matplotlib 中英文及公式字体设置
  16. 渗透测试工程师常见面试33题——应届生
  17. Transformer-M:一个能理解2D和3D分子的Transformer
  18. oracle imp加快速度,加快IMP速度
  19. Android课设之校园二手交易app
  20. Composite Coloring(思维 数论(筛素数 分解质因数))

热门文章

  1. Php底层深度探索(2)---Apache运行机制剖析 王泽宾
  2. VOIP侵蚀电信利益,未来最赚钱的行业.
  3. 编程相关离线文档下载方式推荐
  4. oracle使一个字段自增,Oracle数据库实现一个字段自增
  5. mysql查询2个isbn数据,数据库实验二 数据查询
  6. java 数组 c foreach_在Java 8中,为什么Arrays没有给出forEach的Iterable方法?
  7. 说好的人工智能 怎么只看到高科技玩具?
  8. Zabbix二次开发_03api列表
  9. 【云栖大会】站在时间轴上看基础设施
  10. Redux 入坑笔记