关于索引的使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 关于索引的使用

文章目录

😊 @ 作者:Lion J
💖 @ 主页: https://blog.csdn.net/weixin_69252724
🎉 @ 主题:关于索引的使用
⏱️ @ 创作时间:2024年04月24日
————————————————

选择合适的字段创建索引

▶不为 NULL 的字段:索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用 0,1,true,false 这样语义较为清晰的短值或短字符作为替代。
▶被频繁查询的字段:我们创建索引的字段应该是查询操作非常频繁的字段。
▶被作为条件查询的字段:被作为 WHERE 条件查询的字段,应该被考虑建立索引。
频繁需要排序的字段:索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
▶被经常频繁用于连接的字段:经常用于连接的字段可能是一些外键列,对于外键列并不一定要建立外键,只是说该列涉及到表与表的关系;对于频繁被连接查询的字段,可以考虑建立索引,提高多表连接查询的效率。

被频繁更新的字段应该慎重建立索引

虽然索引能带来查询上的效率,但是维护索引的成本也是不小的。 如果一个字段不被经常查询,反而被经常修改,那么就更不应该在这种字段上建立索引了。
因为每一次修改索引的字段, 那么该字段也需要更新, 因为位置会发生变化, 导致索引位置的频繁切换

限制每张表的索引数量
索引并不是越多越好,建议单张表索引不超过 5 个!
索引可以提高效率同样可以降低效率。索引可以增加查询效率,但同样也会降低插入和更新的效率,甚至有些情况下会降低查询效率。因为 MySQL 优化器在选择如何优化查询时,会根据统一信息,

对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加 MySQL 优化器生成执行计划的时间,同样会降低查询性能

这就是MySQL再server层的优化功能, 由优化器来决定,如果由多个索引, 那么优化器就需要产生非常多次的计划, 并从中选出最优的, 给SQL优化器带来不小的压力

不要给字符串创建索引

因为字符串的索引相较于普通的索引需要很大的存储空间,而且再修改方面也不简洁

一般使用字符转专用的前缀索引来代替

避免索引的失效
索引失效也是慢查询的主要原因之一,常见的导致索引失效的情况有下面这些

  1. 使用 SELECT 进行查询; SELECT 不会直接导致索引失效(如果不走索引大概率是因为 where 查询范围过大导致的),但它可能会带来一些其他的性能问题比如造成网络传输和数据处理的浪费、无法使用索引覆盖;
  2. 创建了组合索引,但查询条件未遵守最左匹配原则;
  3. 在索引列上进行计算、函数、类型转换等操作;
  4. 以 % 开头的 LIKE 查询比如 LIKE '%abc';
  5. 查询条件中使用 OR,且 OR 的前后条件中有一个列没有索引,涉及的索引都不会被使用到;IN 的取值范围较大时会导致索引失效,走全表扫描(NOT IN 和 IN 的失效场景相同);
相关文章
|
7月前
|
索引
索引
索引。
39 0
|
3天前
|
人工智能 索引
索引
Lua中的赋值语句用于改变变量或表域的值。可以同时对多个变量赋值,如`a, b = 10, 2x`。赋值时,Lua先计算右边值再分配给左边变量,允许交换变量值,如`x, y = y, x`。若变量与值数量不匹配,变量多时补nil,值多时忽略多余值。多值赋值常用于函数返回值的接收。访问table使用方括号或点运算符,如`t[i]`和`t.i`。优先使用局部变量以避免命名冲突并提高效率。
|
3天前
|
SQL 搜索推荐 关系型数据库
|
3天前
|
存储 算法 关系型数据库
索引总结(2)
索引总结(2)
|
7月前
|
存储 关系型数据库 MySQL
了解和认识索引
了解和认识索引 。
40 0
|
7月前
|
关系型数据库 MySQL 数据库
了解和认识索引
了解和认识索引。
30 0
|
7月前
|
关系型数据库 MySQL 索引
索引(2)
索引(2)。
16 0
|
11月前
|
数据库 索引
请注意这些情况下,你的索引会不生效!
数据库性能优化是确保系统高效运行的关键要素之一。而索引作为提升数据库查询性能的重要工具,在大部分情况下都能发挥显著的作用。然而,在某些情况下,索引可能会失效或不起作用,导致查询性能下降,甚至引发性能瓶颈。
|
存储 缓存 自然语言处理
正排索引
介绍ElasticSearch相关正排索引
|
存储 关系型数据库 MySQL
索引是什么
索引是什么
211 0