1.索引创建注意事项

适合的场景

1.频繁使用where语句查询的字段
2.关联字段需要建立索
3.如果不创建索引,那么在连接的过程中,每个值都会进行一次全表扫描
4.分组和排序字段可以建立索引因为索引天生就是有序的,在分组和排序时优势不言而喻
5.需要进行聚合统计的字段可以创建索引
6.比如需要对school字段进行count0操作:因
为B+树相同的值都存储在同一个叶子节点中统计速度很快但是并不是所有上诉的字段都可以建立索引,还需要考虑他是否是一下情况

不适合的场景

1.字段频繁的更新 因为频繁的更新除了修改表数据外还需要维护索引信息,B+树调整会降低性能
2.字段取值重复率高,区分度低唯一性差的字段不适合创建索引
3.比如性别字段,取值过于
·参与列计算的列不适合创建索引,索引会失效

2.MySQL中的索引数量是否越多越好?为什么?

因为索引不论从时间还是空间上都是有一定成本的

1)时间

每次对表中的数据进行增删改(NSERT、UPDATE或DELETE)的时候,索引也必须被更新,这会增加写入操作的开销。例如删除了一个name为面试鸭的记录,不仅主键索引上需要修改,如果name字段有索引,那么name索引也需要修改,所以索引越多需要®改的地方也就越多,时间开销就大了,并且B+树可能会有页分裂、合并等操作,时间开销就会更大。

还有一点需要注意:小ySQL有个查询优化器,它需要分析当前的查询,选择最优的计划,这过程就需要考虑选择明那个索引的查询成本低。如果索引过多,那么会导致优化器耗费更多的时间在选择上,甚至可能因为数据的不准确而选择了次优的索引。

2)空间

每建立一个二级索引,都需要新建一个B+树,默认每个数据页都是16KB,如果数据量很大,索引又很多,占用的空间可不小。

3.MySQL中如何进行SQL调优?

1.避免select*,只查询必要的字段
2.合理设计索引,通过联合索引进行覆盖索引及索引下推技术的优化,减少回表的次数,提升效率
3.避免SQL中进行函数计算等操作,导致无法命中索引

4.避免使用like,导致全表扫描(如果符合最左前缀匹配原则可以走索引)】
5.注意使用联合索引需满足最左匹配原则
6.不要对无索引字段进行排序操作
7.连表查询需注意不同字段的字符集保持一致
8.注意隐式类型转换操作,会导致索引失效使用OR,两边需保持等值匹配且都为索引列,才会走索引

以上都是对SQL进行优化,避免索引失效等进行SQL调优,还可以从其他方面进行考虑,比如先分析SQL慢的原因

-索引失效
-多表oin
-查询字段太多
-表中数据量太大
-索引区分度不高
-数据库连接数不够
-数据库的表结构不合理
-数据库IO或者CPU比较高
-数据库参数不合理
-长事务导致的
-锁竞争导致的长时间的等待

拓展:
1:为什么多表join会导致SQL慢?

MySQL是使用了嵌套循环(Nested.-Loop Join)】的方式来实现关联查询的,简单点说就是要通过两层循环,用第一张表做外循环,第二张表做内循环,外循环的每一条记录跟内循环中的记录作比较,符合条件的就输出。而具体到算法实现上主要有simple nested loopblock nested loop和index nested loop这三种。而且这三种的效率都没有特别高。小ySQL是使用了嵌套循环(Nested-Loop Join)的方式来实现关联查询的,如果有2张表join的话,复杂度最高是0(n2),3张表则足0n3)随着表越多,表中的数据量越多,JOIN的效率会呈指数级下降。

2:不使用引oin,如何做关联查询?

主要有以下做法
1、在内存中自己做关联,即先从数据库中把数据查出来之后,我们在代码中再进行二次查询,然后再进行关联。
2、数据冗余,那就是把一些重要的数据在表中做冗余,这样就可以避免关联查询了。
3、宽表,就是基于一定的join关系,把数据库中多张表的数据打平做一张大宽表,可以同步到ES或者干脆直接在数据库中直接查都可以

3.数据量太大也会导致SQL慢,那怎么解决?

具体的解决方案有以下几种:
1、数据归档,把历史数据移出去,比如只保留最近半年的数据,半年前的数据做归档。
2、分库分表、分区。把数据拆分开,分散到多个地方去,这里不详细介绍了,我们的文档中有分库分表和分区的详细介绍,不展开了。
3、使用第三方的数据库,比如把数据同步到支持大数量查询的分布式数据库中,如oceanbase、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95962.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95962.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95962.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode无法检测到typescript环境解决办法

有一个vitereacttypescript项目,在工作电脑上一切正常。但是,在我家里的电脑运行,始终无法检测到typescript环境。即使出现错误的ts语法,也不会有报错提示,效果如下:我故意将一个string类型,传入…

【MCP开发】Nodejs+Typescript+pnpm+Studio搭建Mcp服务

MCP服务支持两种协议,Studio和SSE/HTTP,目前官方提供的SDK有各种语言。 开发方式有以下几种: 编程语言MCP命令协议发布方式PythonuvxSTUDIOpypiPython远程调用SSE服务器部署NodejspnpmSTUDIOpnpmNodejs远程调用SSE服务器部署… 一、初始化项…

vscode使用keil5出现变量跳转不了和搜索全局不了

vscode使用keil5出现变量跳转不了,或者未包含文件,或者未全局检索; 参考如下文章后还会出现; 为什么vscode搜索栏只搜索已经打开的文件_vscode全局搜索只能搜当前文件-CSDN博客 在机缘巧合之下发现如下解决方式: 下载…

命名空间——网络(net)

命名空间——网络(net) 一、网络命名空间:每个都是独立的“网络房间” 想象你的电脑是一栋大楼,每个网络命名空间就是大楼里的一个“独立房间”: 每个房间里有自己的“网线接口”(网卡)、“门牌…

一文读懂16英寸笔记本的实际尺寸与最佳应用场景

当您搜索"16寸笔记本电脑长宽"时,内心真正在问的是什么?是背包能否容纳?桌面空间是否足够?还是期待屏幕尺寸与便携性的完美平衡?这个看似简单的尺寸数字背后,凝结着计算机制造商对用户体验的深刻…

Android Studio中创建Git分支

做一些Android项目时,有时候想要做一些实验性的修改,这个实验可能需要很多步骤,所以不是一时半会能完成的,这就需要在实验的过程中不断修改代码,且要提交代码,方便回滚或比较差异,但是既然是实验…

内存可见性和伪共享问题

文章目录什么是内存可见性问题为什么会出现可见性问题解决可见性问题的方法1. 使用volatile关键字2. 使用synchronized3. 使用java.util.concurrent包下的原子类什么是伪共享问题CPU缓存行伪共享的危害解决伪共享的方法1. 缓存行填充2. 使用Contended注解(JDK 8&…

Spring MVC 九大组件源码深度剖析(三):ThemeResolver - 动态换肤的奥秘

文章目录一、主题机制的核心价值二、核心接口设计三、四大实现类源码解析1. FixedThemeResolver(固定主题策略)2. CookieThemeResolver(Cookie存储策略)3. SessionThemeResolver(Session存储策略)4. Abstra…

一、Docker本地安装

((这里引用知乎上大佬的说法:https://www.zhihu.com/question/48174633 服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。 一、参考帖子 Ubuntu 的 |Docker 文档 【docker】ubuntu完全卸载docker及再次安装_ubuntu…

LeetCode 分类刷题:2962. 统计最大元素出现至少 K 次的子数组

题目给你一个整数数组 nums 和一个 正整数 k 。请你统计有多少满足 「 nums 中的 最大 元素」至少出现 k 次的子数组,并返回满足这一条件的子数组的数目。子数组是数组中的一个连续元素序列。示例 1:输入:nums [1,3,2,3,3], k 2 输出&#…

10分钟掌握swift

整理一个 10分钟掌握 Swift 的精华指南,用一个 Demo 串联 Swift 的核心语法、数据结构、函数、类/结构体和闭包,让你快速入门。1️⃣ 基础语法与变量import Foundation // 引入基础库// 变量和常量 var name: String "Alice" // 可变 let…

【完整源码+数据集+部署教程】食品分类与实例分割系统源码和数据集:改进yolo11-AggregatedAttention

背景意义 研究背景与意义 随着全球食品产业的快速发展,食品安全和质量控制日益成为社会关注的焦点。食品分类与实例分割技术的应用,能够有效提升食品识别的准确性和效率,为食品监管、营养分析以及智能餐饮等领域提供重要支持。传统的食品识别…

C# 中的N+1问题

目录 含义 影响 避免方法 1. 立即加载(Eager Loading) 2. 显式加载(Explicit Loading) 3. 投影(Projection) 4. 批处理查询 5. 禁用延迟加载 含义 N1 问题 是 ORM(对象关系映射&#x…

国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家

多光谱相机是一种能够同时捕捉多个特定波段的光谱信息,这些波段覆盖可见光、近红外以及短波红外等区域。广泛应用于遥感、农业、环境监测、工业检测、安防等领域。近年来,我国在多光谱技术领域取得了显著进步,涌现出一批技术实力强、产品性能…

如何用外部电脑访问本地网页?

之前本来说用内网穿透工具来查看完成这个工具,结果感觉各种不符合心意,突然发现有更简单的方法。如果想让两台电脑在 同一局域网 内都能访问运行在 http://localhost:5174/ 上的项目,而不需要使用内网穿透工具,可以通过以下方法实…

PromptPilot — AI 自动化任务的下一个环节

作者:陈大鱼头 github:https://github.com/KRISACHAN 邮箱:chenjinwen77@gmail.com PromptPilot 体验地址:https://promptpilot.volcengine.com/ 前言 如果大家有关注 AI 相关新闻的话,一定会知道在 2025 年 6 月 11 日火山引擎 FORCE 原动力大会上,豆包大模型 1.6 系列…

[Responsive theme color] 动态更新 | CSS变量+JS操控 | 移动端-汉堡菜单 | 实现平滑滚动

第3章:CSS变量操控 欢迎回来🐻‍❄️ 通过前两章,我们掌握了 动态主题定制 的交互逻辑,以及 色彩工具函数 如何实现色值格式转换。 本章将揭示技术拼图的最后一块:CSS变量动态操控,解析JavaScript如何实…

数学建模 15 逻辑回归与随机森林

逻辑回归(用于分类)用途:通过已有数据,计算出线性方程的参数w后,可以用于预测某一个物品属于某一类的概率,[0,1];求解思想:逻辑回归通过最大似然估计(Maximum Likelihood Estimation…

衡石使用指南嵌入式场景实践之仪表盘嵌入

应用展示交互 应用集市展示应用时会与仪表盘、图表进行交互操作,主要包括去分析、保存当前过滤快照、字段设置、刷新、全屏、嵌入、导出等功能。 保存当前过滤快照 仪表盘展示数据时往往使用过滤器来查看不同场景下的分析数据。用户从一种场景切换到另一种场景&a…

Qt | 四种方式实现多线程导出数据功能

前言 在以往的项目开发中,在很多地方用到了多线程。针对不同的业务逻辑,需要使用不同的多线程实现方法,来达到优化项目的目的。本文记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示…