Mysql选择合适的字段创建索引
1. 考虑字段的选择性
-
选择性:字段的选择性是指字段中不重复值的比例。选择性越高(即不重复值越多),索引的效率越高。
-
示例:
-
如果一个字段有100万行数据,但只有2个不重复值(如性别字段,值为“男”和“女”),那么这个字段的选择性很低,单独为其创建索引意义不大。
-
如果一个字段有100万行数据,且有90万不重复值(如用户ID字段),那么这个字段的选择性很高,适合创建索引。
-
2. 优先考虑查询条件中的字段
-
WHERE子句中的字段:如果某个字段经常出现在
WHERE
子句中作为查询条件,那么它是一个很好的索引候选字段。 -
示例:
SELECT * FROM orders WHERE order_status = 'shipped';
如果
order_status
字段经常用于查询条件,可以考虑为其创建索引。
3. 考虑排序和分组的字段
-
ORDER BY和GROUP BY子句中的字段:如果某个字段经常用于
ORDER BY
或GROUP BY
子句,那么为该字段创建索引可以显著提升性能。 -
示例:
SELECT * FROM orders ORDER BY order_date DESC; SELECT COUNT(*) FROM orders GROUP BY order_status;
如果
order_date
或order_status
字段经常用于排序或分组,可以考虑为其创建索引。
4. 考虑连接操作的字段
-
JOIN操作中的字段:如果某个字段经常用于表连接操作(如
JOIN
子句中的字段),那么为该字段创建索引可以显著提升连接操作的性能。 -
示例:
SELECT o.order_id, c.customer_name FROM orders o JOIN customers c ON o.customer_id = c.customer_id;
如果
customer_id
字段经常用于连接操作,可以考虑为其创建索引。
5. 考虑字段的更新频率
-
更新频率低的字段:如果某个字段的值很少更新(如用户ID或订单状态),那么为该字段创建索引不会对性能产生负面影响。
-
更新频率高的字段:如果某个字段的值经常更新(如库存数量),那么为该字段创建索引可能会导致索引维护成本过高,反而降低性能。
-
示例:
-
user_id
字段很少更新,适合创建索引。 -
stock_quantity
字段经常更新,不适合创建索引。
-
6. 考虑字段的类型和大小
-
字段类型:某些字段类型更适合创建索引,例如
INT
、VARCHAR
(短字符串)、DATE
等。 -
字段大小:字段的大小也会影响索引的性能。字段越小,索引的效率越高。
-
示例:
-
VARCHAR(255)
字段比VARCHAR(1000)
字段更适合创建索引。 -
INT
字段比VARCHAR
字段更适合创建索引。
-
7. 使用复合索引
-
复合索引:如果多个字段经常一起出现在查询条件中,可以考虑创建复合索引。
-
示例:
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31' AND order_status = 'shipped';
如果
order_date
和order_status
字段经常一起用于查询条件,可以创建复合索引CREATE INDEX idx_order_date_status ON orders(order_date, order_status);
注意:复合索引的列顺序也很重要,通常将选择性高的列放在前面。
8. 避免冗余索引
-
冗余索引:如果已经有一个复合索引,那么覆盖该复合索引的前缀列的索引是冗余的。
-
示例:
-
如果已经创建了复合索引
(a, b, c)
,那么单独的索引(a)
和(a, b)
是冗余的。
-
9. 考虑覆盖索引
-
覆盖索引:如果查询的字段完全包含在索引中,MySQL可以直接使用索引而无需回表查询,这种索引称为覆盖索引。
-
示例:
SELECT order_id, order_status FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
如果创建了复合索引
CREATE INDEX idx_order_date_status_id ON orders(order_date, order_status, order_id)
,查询可以直接使用索引,无需回表查询。
10. 定期分析和优化索引
-
分析索引:定期使用
ANALYZE TABLE
命令分析表的索引统计信息,确保MySQL的优化器能够做出正确的索引选择。 -
优化索引:根据实际查询的执行计划和性能瓶颈,适时调整索引策略,删除无用的索引,添加新的索引。
相关文章:
Mysql选择合适的字段创建索引
1. 考虑字段的选择性 选择性:字段的选择性是指字段中不重复值的比例。选择性越高(即不重复值越多),索引的效率越高。 示例: 如果一个字段有100万行数据,但只有2个不重复值(如性别字段ÿ…...

Python:操作 Excel 格式化
🔧Python 操作 Excel 格式化完整指南(openpyxl 与 xlsxwriter 双方案) 在数据处理和报表自动化中,Python 是一把利器,尤其是配合 Excel 文件的读写与格式化处理。本篇将详细介绍两大主流库: openpyxl:适合读取与修改现有 Excel 文件xlsxwriter:适合创建新文件并进行复…...
ant-design-vue select 下拉框不好用解决
将optionFilterProp设置为label和a-select-option的:label"item.name"自定义属性 <a-selectshowSearchallowClearoptionFilterProp"label"placeholder"请选择选项"style"width: 120px; margin-right: 16px"><a-select-optio…...
[Java 基础]创建人类这个类小练习
请根据如下的描述完成一个小练习: 定义一个名为 Human 的 Java 类在该类中定义至少三个描述人类特征的实例变量(例如:姓名、年龄、身高)为 Human 类定义一个构造方法,该构造方法能够接收所有实例变量作为参数…...
Day43 Python打卡训练营
作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 选取Kaggle上的CIFAR-10数据集进行CNN训练,并使用Grad-CAM进行可视化,代码将拆分为多个文件以保持模块化。CIFAR-10是…...

雷卯针对易百纳 SS524多媒体处理演示评估板防雷防静电方案
一、 应用场景 1. 远程视频会议 2. 安防监控 3. 人/车检测 4. 人脸检测、比对 5. 屏幕拼接墙 二、 功能概述 1 四核 ARM Cortex-A7 1.2GHz 2 AI算力 1.0Tops 3 4K30fps 4*1080P30编解码 三、 扩展接口 l RAM:板载 2*DDR4,共 2GB; …...

【BUG解决】关于BigDecimal与0的比较问题
这是一个很细小的知识点,但是很容易被忽略掉,导致系统问题,因此记录下来 问题背景 明明逻辑上看a和b都不为0才会调用除法,但是系统会报错:java.lang.ArithmeticException异常: if (!a.equals(BigDecimal…...

Spring Bean 为何“难产”?攻克构造器注入的依赖与歧义
本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续! 🚀 魔都架构师 | 全网30W技术追随者🔧 大厂分布式系统/数据中台实战专家🏆 主导交易系统百万级流量调优 & 车联网平台架构&a…...
LeetCodeHot100(图论篇)
目录 图论岛屿数量题目代码 腐烂的橘子题目代码 课程表题目代码 实现 Trie (前缀树)题目代码 后续内容持续更新~~~ 图论 岛屿数量 题目 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数…...

【Lecture01】动手开发科研智能体(WIN11系统)
1. 配置win11系统中的环境,安装管理器Choco: # Download and install Chocolatey: powershell -c "irm https://community.chocolatey.org/install.ps1|iex" # Download and install Node.js: choco install nodejs-lts --version"22&qu…...

“packageManager“: “pnpm@9.6.0“ 配置如何正确启动项目?
今天在学习开源项目的时候,在安装依赖时遇到了一个报错 yarn add pnpm9.6.0 error This projects package.json defines "packageManager": "yarnpnpm9.6.0". However the current global version of Yarn is 1.22.22.Presence of the "…...
Git Github Gitee GitLab
Git的工作流程 工作区(Workspace):电脑本地目录,即平时存放项目代码的地方 暂存区(Index/Stage):临时存放改动信息的地方 本地仓库(Repository):存放所有提交的版本数据 远程仓库(Remote):托管代码的服务器&#x…...
华为设备OSPF配置与实战指南
一、基础配置架构 sysname HUAWEI-ABR ospf 100 router-id 1.1.1.1area 0.0.0.0network 10.1.1.0 0.0.0.255 # 将接口加入区域0 interface GigabitEthernet0/0/1ospf enable 100 area 0.0.0.0 # 华为支持点分十进制区域号bandwidth-reference 10000 # 设置10Gbps参考带宽…...

Paraformer分角色语音识别-中文-通用 FunASR
https://github.com/modelscope/FunASR/blob/main/README_zh.md https://github.com/modelscope/FunASR/blob/main/model_zoo/readme_zh.md PyTorch / 2.3.0 / 3.12(ubuntu22.04) / 12.1 Paraformer分角色语音识别-中文-通用 https://www.modelscope.cn/models/iic/speech_p…...

Spitfire:Codigger 生态中的高性能、安全、分布式浏览器
Spitfire 是 Codigger 生态系统中的一款现代化浏览器,专为追求高效、隐私和分布式技术的用户设计。它结合了 Codigger 的分布式架构优势,在速度、安全性和开发者支持方面提供了独特的解决方案,同时确保用户对数据的完全控制。 1. 高性能浏览…...
vimadbgit命令
vim 全部选中 全选(高亮显示):按esc后,然后ggvG或者ggVG 全部复制:按esc后,然后ggyG 全部删除:按esc后,然后dG -----------------------------------------------------------------…...

运行shell脚本时报错/bin/bash^M: 解释器错误: 没有那个文件或目录
Windows的换行符为\r\n,而linux换行符为\n。先查看一下文件是什么格式的 :set ff --查询一下格式是什么 由于使用nodepad新建的脚本,首选项中格式设置成了windows,上传到linux中报错。 解决方法 1、nodepad中【设置》首选项】修改为unix&am…...
2506,wtl的通知事件
通知事件 最后一步,通知(连接)控件CMainDlg想要接受的浏览器控件触发的消息.连接在OnInitDialog(),断开在OnDestroy(). VC6中连接 VC6中,ATL的全局函数,AtlAdviseSinkMap()通知(连接)对话框中所有控件开始或终止发送事件到C对象. 该该函数的第一个参数是一个指向拥有事件映射…...

Shiro安全权限框架
①、添加依赖 ②、创建ini文件 获取权限相关信息可以通过数据库获取,也可以通过ini配置文件获取 ③、认证代码 public class ShiroRun{public static void main(){//初始化获取SecurityManagerIniSerucityManagerFactory factory new IniSecurityManagerFac…...

虚拟现实教育终端技术方案——基于EFISH-SCB-RK3588的全场景国产化替代
一、VR教育终端技术挑战与替代价值 实时交互性能瓶颈 赛扬N100/N150仅支持3DOF渲染(延迟>25ms),动态手势识别帧率≤15FPS,难以满足6DOF教学场景需求RK3588 Mali-G610 GPU支持6DOF空间渲染(延迟≤12ms&…...
深入理解CSS浮动:从基础原理到实际应用
深入理解CSS浮动:从基础原理到实际应用 引言 在网页设计中,CSS浮动(float)是一个历史悠久却又至关重要的概念。虽然现代布局技术如Flexbox和Grid逐渐流行,但浮动仍然在许多场景中发挥着重要作用。本文将带你深入理解…...
代码训练LeetCode(22)研究者H指数
代码训练(22)LeetCode之研究者H指数 Author: Once Day Date: 2025年6月4日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 274. H 指数 - 力扣(LeetCode)力扣 (LeetCode) 全球极客挚爱的…...

网络安全A模块专项练习任务五解析
任务五:Linux 操作系统安全配置-1 任务环境说明: ✓ 服务器场景:LinuxServer:(开放链接) ✓ 用户名:root,密码:123456 ✓ 数据库用户名:root,密码:123456 请对服务器 LinuxServer 按要求进行相应的设置,提高服务器的安全性。 1.设置最小…...
git cli 基于远程master分支创建本地分支并切换
1、获取远程最新状态 git fetch origin2、从远程master创建本地分支并切换 git checkout -b new-branch-name origin/master或者,新版本写法 git switch -c new-branch-name origin/master3、如果要推送到远程,并建立跟踪,执行下面的命令 …...

Redis初入门
Nosql:Not-Only SQL(泛指非关系型数据库),作为关系型数据库的补充 作用:应对基于海量用户和海量数据前提下的数据处理问题 redis:C语言开发的一个开源的高性能键值对数据库 特征: 1、数据之…...

(10)Fiddler抓包-Fiddler如何设置捕获Firefox浏览器的Https会话
1.简介 经过上一篇对Fiddler的配置后,绝大多数的Https的会话,我们可以成功捕获抓取到,但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话,需要我们更进一步的配置才能捕获到会话进行抓包。 2.环境 1.环境是Windows 10版…...

使用pandas实现合并具有共同列的两个EXCEL表
表1: 表2: 表1和表2,有共同的列“名称”,而且,表1的内容(行数)<表2的行数。 目的,根据“名称”列的对应内容,将表2列中的“所处行业”填写到表1相应的位置。 实现代…...

2025年- H69-Lc177--78.子集(回溯,组合)--Java版
1.题目描述 2.思路 3.代码实现 class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> resnew ArrayList<>();List<Integer> curnew ArrayList<>();//从索引0开始递归backtracking(res,cur,nums,0…...

目标检测任务的评估指标mAP50和mAP50-95
mAP50 和 mAP50-95 是目标检测任务中常用的评估指标,用于衡量模型在不同 交并比(IoU)阈值 下的平均精度(Average Precision, AP)。它们的区别主要体现在 IoU 阈值范围 上。 ✅ 1. mAP50(mean Average Prec…...

C++String的学习
1、C语言中的字符串 C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想(即面向对象编程(…...