关于索引的使用

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 关于索引的使用

文章目录

😊 @ 作者: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 的失效场景相同);
目录
打赏
0
1
1
0
14
分享
相关文章
一般会在什么样字段上添加什么样的索引
在数据库中,索引是一种用于加快数据检索速度的数据结构。通过在特定的字段上创建索引,可以大幅度提高查询效率。然而,不是所有的字段都适合创建索引,因为索引的创建和维护也会带来额外的开销。在选择字段创建索引时,需要综合考虑数据的查询频率、数据的更新频率以及索引的存储和性能开销等因素。下面将介绍一些常见的字段类型和索引的选择策略。
224 1
|
9月前
|
15. 索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要 ?
是否越多索引越好?并非如此。应根据需求建索引:主键自动索引,频繁查询、关联查询、排序、查找及统计分组字段建议建索引。但表记录少,频繁增删改操作,频繁更新的字段,以及使用频率不高的查询条件则不需要建索引。
144 0
|
8月前
|
Java垃圾回收器:版本差异、使用技巧与最佳实践
Java垃圾回收器:版本差异、使用技巧与最佳实践
178 1
|
9月前
|
JDK8默认垃圾回收器详解
JDK8默认垃圾回收器详解
231 0
Java应用频繁FullGC分析
### 一、JVM的内存分布 #### 1.1 JVM内存分布概况 ![img](https://img.alicdn.com/tfs/TB1bhRnRFXXXXa2XVXXXXXXXXXX-510-401.png) * 堆内存划分为: Eden、Survivor 和 Tenured/Old 空间 ![img](https://img.alicdn.com/tfs/TB1EVh
9725 0
JVM工作原理与实战(三十九):G1垃圾回收器原理
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器执行流程、年轻代回收原理、卡表(Card Table)、记忆集的生成流程、年轻代回收的详细步骤、混合回收的步骤、初始标记、并发标记、SATB、转移等内容。
727 0
Feed流系统设计-总纲
简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代表性的产品就是微博、微信,以及后来的今日头条、快手等。这些移动化联网时代的新产品在过去几年间借着智能手机的风高速成长。
29109 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等