转: https://www.cnblogs.com/liehen2046/p/11052666.html

简述

什么时候没用

1.有or必全有索引;
2.复合索引未用左列字段;
3.like以%开头;
4.需要类型转换;
5.where中索引列有运算;
6.where中索引列使用了函数;
7.如果mysql觉得全表扫描更快时(数据少);

什么时没必要用

1.唯一性差;
2.频繁更新的字段不用(更新索引消耗);
3.where中不用的字段;
4.索引使用<>时,效果一般;

详述(转)

索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:

  • 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

  • 对于复合索引,如果不使用前列,后续列也将无法使用,类电话簿。
  • like查询是以%开头

  • 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

  • where 子句里对索引列上有数学运算,用不上索引

  • where 子句里对有索引列使用函数,用不上索引

  • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

比如数据量极少的表

什么情况下不推荐使用索引?

1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

2) 频繁更新的字段不要使用索引

比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

只有在where语句出现,mysql才会去使用索引

4) where 子句里对索引列使用不等于(<>),使用索引效果一般

mysql 索引失效的7种情况相关推荐

  1. MySQL索引失效的9种情况(针对InnoDB存储引擎)

    前言 MySQL中提高查询性能的最有效的方式之一就是对数据表合理的设计索引,优秀的索引的设计方案很大程度上可以提高查询的性能. 因此,索引对查询的速度有着至关重要的影响. 为了尽量的使优化器用到我们的 ...

  2. 详解MySQL索引失效的几种情况

    MySQL索引是提高查询效率的重要手段.索引失效会导致查询效率下降,甚至全表扫描,影响数据库性能.以下是可能导致MySQL索引失效的情况: 1. 使用or操作符 当where语句中使用or操作符并且o ...

  3. mysql数据索引失效_MySQL索引失效的几种情况

    1.索引无法存储null值 a.单列索引无法储null值,复合索引无法储全为null的值. b.查询时,采用is null条件时,不能利用到索引,只能全表扫描. 为什么索引列无法存储Null值? a. ...

  4. [索引] 索引失效的几种情况

    一.单表索引失效的几种情况 建立员工记录表 CREATE TABLE `staffs` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255 ...

  5. sql索引失效的几种情况

    sql索引失效的几种情况 1.使用 != 或者 <> 导致索引失效 2.类型不一致导致索引失效 3.函数导致索引失效 4.运算符导致索引失效 5.模糊搜索导致索引失效 6.NOT IN.N ...

  6. MySQL 索引失效的 15 种场景!

    背景 无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑.常见的现象就是:明明在字段上添加了索引,但却并未生效. 前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参 ...

  7. MySql复合索引失效的几种情况

    建表 插入数据 建立复合索引 或者 查询插入的索引 执行测试Sql 测试数据1 这里常规查询,分别查询了当使用复合索引中的部分字段当查询条件时的索引使用情况,通过explain执行计划结果显示,以上四 ...

  8. mysql索引失效_导致MySQL索引失效的几种常见写法

    最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用的易于 ...

  9. MySQL索引失效的几种常见场景

    前言 我们在使用MySQL查询数据的时候,总会遇见没有正确使用到索引的情况. 这里我们列举几种常见的,搜索条件使用了索引列却没有走索引的场景. (以下测试均在MySQL8.0.28中完成,且所有数据均 ...

  10. 索引失效的几种情况和原因剖析

    在网上看到很多关于索引失效的情况,但是看了感觉都讲的不过明确,或者只告诉你这么查询会导致索引失效但是却没有告诉你索引失效的原因,这里做一些详细的说明. 一般我们常见的出现索引失效的有这么几个原因 1, ...

最新文章

  1. Android模拟器快捷键
  2. c680和c650_最低10万95,全新F800R、C650Sport和F800GT,BMW三款焕新上市
  3. Linux配置SSH无密码登录
  4. java 并发模型总类_java并发编程系列-内存模型基础
  5. C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
  6. 简单设计企业级JOB平台
  7. OpenCV学习笔记(九) 重映射、仿射变换
  8. sql数据库快照与恢复 规则绑定
  9. matlab求函数方程的正根,matlab解方程组的时候,可以只要正根吗?
  10. BZOJ 3238 【AHOI2013】 差异
  11. 如何选择适合的微信号码开通状态检测工具
  12. css设置各种中文字体如雅黑、黑体、宋体、楷体等
  13. php网站服务器工具,PHP网站服务器管理软件LuManager1.1.9发布
  14. webflux之reactor-Publisher
  15. 这个Python脚本牛逼了,秒抢红包就算了,还能无视撤回消息
  16. Objective-C
  17. 大数据在医疗行业中的5种应用
  18. 【原理】#01红外热成像仪的工作原理介绍
  19. css的nth选择器,CSS3 :nth-child() 选择器
  20. 华益血糖信息管理系统服务器,华益精点推出新一代智能血糖仪

热门文章

  1. 最简单的三极管音频放大电路
  2. 【2018华科机试】十二进制
  3. excel单元格做下拉列表以及改变下拉列表的字体
  4. 爬虫爬取taptap上关于厂商的评论
  5. springboot获取apk包名、app名称、版本名称、版本号
  6. 蓝色——网页效果图设计之色彩索引
  7. RS485MODBUS转PROFINET网关配置-科隆OPTIFLUX7000MODBUS通信协议电磁流量计接入西门子PLC S7-1500PROFINET以太网通讯网络配置方法
  8. MSXML版本6.10.1129.0
  9. 高效算法:竞赛、应试与提高必修128例
  10. 好课堂Scratch编程08 趣学篇(四)密林深处的危险气息