Mysql中索引优化和失效

什么是索引

要了解索引优化和索引失效的场景就要先了解什么是索引

索引是一种有序的存储结构,按照单个或者多个列的值进行排序,以提升搜索效率。

索引的类型

UNIQUE唯一索引

不可以出现相同的值,可以有NULL值。

INDEX普通索引

允许出现相同的索引内容。

PRIMARY KEY主键索引

不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引。

fulltext index 全文索引

上述三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词,然而并没有什么卵用,因为只有myisam以及英文支持,并且效率让人不敢恭维,但是可以用coreseek和xunsearch等第三方应用来完成这个需求。

Sql索引优化共有以下几种方法

  1. 通过explain 语句帮助选择更好的索引和写出更优化的查询语句。
  2. SQL语句中的IN包含的值不应该过多。
  3. 当只需要一条数据的时候,使用limit 1。
  4. 如果限制条件中其他字段没有索引,尽量少用or。
  5. 尽量用union all代替union。
  6. 不使用ORDER BY RAND()
  7. 区分in和exists、not in和not exists。
  8. 使用合理的分页方式以提高分页的效率。
  9. 查询的数据过大,可以考虑使用分段来进行查询。
  10. 避免在where子句中对字段进行null值判断。
  11. 避免在where子句中对字段进行表达式操作。
  12. 必要时可以使用force index来强制查询走某个索引。
  13. 注意查询范围,between、>、<等条件会造成后面的索引字段失效。
  14. 关于JOIN优化

sql索引失效的场景

非最左匹配

最左匹配原则指的是,以最左边的为起点字段查询可以使用联合索引,否则将不能使用联合索引

错误模糊查询

模糊查询 like 的常见用法有 3 种:

  1. 模糊匹配后面任意字符:like '张%'
  2. 模糊匹配前面任意字符:like '%张'
  3. 模糊匹配前后任意字符:like '%张%'

而这 3 种模糊查询中只有第 1 种查询方式可以使用到索引

列运算

如果索引列使用了运算,那么索引也会失效

使用函数

查询列如果使用任意 MySQL 提供的函数就会导致索引失效

类型转换

如果索引列存在类型转换,那么也不会走索引,比如 address 为字符串类型,而查询的时候设置了 int 类型的值就会导致索引失效

使用 is not null

当在查询中使用了 is not null 也会导致索引失效,而 is null 则会正常触发索引的

相关推荐
~光~~6 小时前
【嵌入式linux学习_OV8858 bring up】L2_V4L2与Ov8858
linux·数据库·学习
菜地里的小菜鸟7 小时前
达梦数据库备份与恢复
数据库·达梦·达梦数据库备份与恢复
阳光九叶草LXGZXJ8 小时前
达梦数据库-报错-11-cmd 13 validate error
linux·运维·数据库·sql·学习
PGCCC9 小时前
PostgreSQL 数据库认证体系技术解析:PCA / PCP / PCM 三级能力模型与考纲拆解
数据库·postgresql·pcm
wWYy.9 小时前
Mysql:覆盖索引
android·数据库·mysql
long3169 小时前
PostgreSQL 学习资料 · 入门 / 练习 / 精通 / 扩展
java·数据结构·数据库·spring boot·sql·postgresql·数据库开发
拳里剑气9 小时前
Linux:进程间通信
linux·运维·数据库·进程
阳光九叶草LXGZXJ10 小时前
达梦数据库-报错-12-[-7184]:对象定义[XXX]被修改,版本检查失败
linux·运维·服务器·数据库·sql·学习
惜分飞10 小时前
Oracle Block Edit Tool (obet) 功能增强–2026.07
数据库·oracle·obet
无忧.芙桃10 小时前
MySQL数据库原理与实践(五):内置函数
数据库·mysql