当前位置:网站首页>【MySQL哪些字段适合建索引,哪些查询条件会导致索引失效】
【MySQL哪些字段适合建索引,哪些查询条件会导致索引失效】
2022-08-08 16:24:00 【一个搬砖的农民工】
MySQL五种索引类型
一、哪些字段适合建索引
1.对应重复率非常高的字段不要建索引,如state,type等
2.尽量不要使用复合索引,如果两个字段重复率都不高,两个字段分别见索引
3.如果确实需要复合索引,重复率低的放前面,如(orde_id,seq)订单号和序列
4.一般情况外键必须建立索引
5.能建唯一索引的必须建唯一索引,提升性能
6.不要设计过多的索引,这样会影响查询效率
二、范围查询索引失效问题
范围查询索引失效,只针对二级索引(除了主键,其他索引都是二级索引)
(1)、如果走二级索引查询,步骤就是:二级索引–>主键索引–>数据,这就是回表查询(mysql索引中关联的主键,而不是数据,所以二级索引查询会有一个回表的操作)。
(2)、硬盘随机I/O的性能远低于顺序I/O。
1、!= 和 <>失效问题
- 主键一定走索引
- 二级索引正常情况下不走索引,因为走索引效率不如全表;但如果!=过滤数据量超过总数据某个百分比的时候会走索引,因为这个时候sql优化器会认为走索引代价低于全表查询
2、其他范围查询失效问题
注意,放弃索引走全表查询需要满足以下几点:
1、二级索引
2、范围查询
3、查询数量超过了总数据的某个百分比
4、并且查询字段不止id和索引还包含了其他字段(select后面字段不仅仅为id和where后端索引字段)
- 其他范围查询 > >= < <= like虽然可以走索引,但是当查询数量超过了总数据的某个百分比,并且为二级索引,并且查询字段不止id和索引还包含了其他字段也会走全表查询,因为mysql的sql优化器会认为回表查询的随机I/O代价大于顺序I/O全表扫的情况下,将放弃走索引。
如下这个sql是不走索引的,并且查询时间为7.337s,数据量为3557003

如果我们强制他走索引,这时候去执行sql时,查询时间用了39.680s,数据量依然为3557003

由上可见这里不用索引查询更快,因为通过索引查询会有一个回表操作
强制索引 select * from 表名 force index(索引名) where …
忽略索引 select * from 表名 ignore index(索引名) where …
2、左前缀原则
- 使用联合索引(id,name,age)查询数据,判断条件需遵循最左原则
3、函数导致索引失效
- SELECT * FROM
userWHERE DATE(create_time) = ‘2020-09-03’;
create_time字段设置索引,那就无法使用函数,否则索引失效,因为函数会破坏索引有序性,sql优化器会放弃走索引。
4、字段类型不一致索引失效
- SELECT * FROM
userWHERE height= 175;
height为varchar类型导致索引失效,尤其多张表时注意。
5、运算符导致索引失效
如果你对列进行了(+,-,*,/,!), 那么都将不会走索引。
SELECT * FROM
userWHERE age - 1 = 20;
6、or引起索引失效
- or两边必须都是索引,否则用or连接的左右语句会索引失效
例:(counter1 和 counter2是索引,counter5不是索引字段)


7、模糊查询导致索引失效
- SELECT * FROM
userWHEREnameLIKE ‘%冰’;
模糊搜索如果你前缀也进行模糊搜索,那么不会走索引。
8、IN、NOT IN、 EXISTS、NOT EXISTS导致索引失效
- 和模糊查询类似,当数据量超过某个百分比后会放弃索引,通常情况下在这些条件查询的数据量不大还是会走索引的


9、IS NULL,IS NOT NULL索引失效问题
- is null 会走索引,跟数据量没关系,猜想跟等值符号一个逻辑
- is not null 跟返回数据量有关,返回数据量少则走索引,大于总数据某个百分比不走索引


边栏推荐
- 线程本地存储 ThreadLocal
- C#/VB.NET convert PDF to PDF/X-1a:2001
- 基于ECS实现一分钟自动化部署【华为云至简致远】
- 常见的网络安全术语之一
- json根据条件存入数据库
- Node简介
- jupyter notebook 隐藏&显示全部输出内容
- 【uniapp小程序】视图容器cover-view
- ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]
- Patience sorting - specializing in quickly solving the longest increasing subarray
猜你喜欢

Teach you how to use uniapp to access chat and IM instant messaging - source code sharing

用于视觉语言导航的自监督三维语义表示学习

携手数字创新 共筑国产生态 7月份AntDB与5款产品完成互认证

egg(二十):fs读取本地的txt文件

C#/VB.NET convert PDF to PDF/X-1a:2001

OpenAI怎么写作「谷歌小发猫写作」

C#/VB.NET 将PDF转为PDF/X-1a:2001

‘xxxx‘ is declared but its value is never read.Vetur(6133)

【有奖征文 第13期】至简致远,“云”响世界,大胆秀出你的华为云技术主张,高额激励等你拿

浅学软件逆向笔记(2)
随机推荐
GHOST tool to access the database
有了这个开源工具后,我五点就下班了!
2020年适用于Linux的10个顶级开源缓存工具
leetcode 155. Min Stack最小栈(中等)
NFT质押挖矿分红系统开发逻辑功能介绍
非常菜的一个批量布置waf脚本
Guanghong Technology: The company provides manufacturing services for Xiaomi, Samsung, OPPO, Nokia and other products in India
急了,Mysql索引中最不容易记的三个知识点通透了
手机注册股票开户的流程?网上开户安全?
ASP.NET Core依赖注入之旅:4.体验服务的注册和消费
Jingdong T9 pure hand type 688 pages of god notes, SSM framework integrates Redis to build efficient Internet applications
使用 Pygame 构建和可视化数独游戏
基于LEAP模型的能源环境发展、碳排放建模预测及不确定性分析
hdu2475 Box
使用pymongo,将MongoDB生成的ObjectId类型数据与字符串之间的相互转化
json根据条件存入数据库
[Unity entry plan] Use the double blood bar method to control the blood loss speed of the damage area
Grid 布局介绍
Streamsets Data Collector 3.12
DASCTF部分复现