当前位置: 首页 > news >正文

MySQL索引相关介绍及优化(未完...)

如何看一条SQL语句的执行好坏?

MySQL提供了自带的工具Explain可以查看sql语句的执行好坏。
explain主要的列:

1:type:这一列表示MySQL决定如何查找表中的行,查找数据行记录的大概范围。

有 system const eq_ref ref range index all几个级别,一般来说,要让查询达到range及以上级别。
  system:表中只有一条数据,且存储引擎可以准确的统计到这条数据。system一般出现在MyISAM、memory类型的表查询中。由于我们一般使用的存储引擎都是InnoDB,所以system这种类型很少会用到。
  const:通过主键或者唯一索引等值查询来定位一条数据。
  eq_ref:在进行多表连接查询时,被驱动表通过主键或唯一索引键进行等值查询。例如
select * from t1 left join t2 on t1.id = t2.id;, t1是全表扫描,但是t2是eq_ref。
  ref:普通二级索引等值查询。
  range:命中索引时,查询某一个范围内的结果。
  index:全索引扫描。
  all:全表扫描

2:possible_keys:这一列显示查询可能使用哪些索引来查找。

3:key:这一列显示mysql实际采用哪个索引来优化对该表的访问。

:4:key_len:这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。

5:Extra:额外信息, 重要值如下:

  Using index:使用覆盖索引
  Using index condition:使用了索引下推。
  Using filesort:使用文件排序而不是索引排序。

索引最佳实践/平常如何使用索引/

1:使用联合索引遵循最左前缀法则。
2:不在索引列上做任何操作,例如计算、函数、自动或者手动类型转换。
3:尽量使用覆盖索引,减少select *。
4:mysql在使用!= 或者 <> 会导致索引失效。
5:不要使用以%通配符开头的查询。
6:注意隐式转换,例如 select * from emp where name = 1000; name会自动转化为数字,导致索引失效。
7:or的左右字段都要是索引字段。
8:order by语句使用索引最左前列或者与where条件列满足最左前缀法则,否则会文件排序。

如何优化sql语句:

1:尽量使用覆盖索引,减少select , 个人觉得覆盖索引很重要,因为例如 select * from tmp where age > 3; mysql可能会觉得符合条件的数据太多,导致会大量回表,索引最终不会走索引。
2:范围查询优化:例如select * from emp where age >= 1 and age <= 100; 可能不会走索引,因为符合条件的太多了,可以把单个范围查询语句拆分为多个。
3:分页查询优化:例如select * from emp order by name limit 90000, 5; name有索引,但是这个语句大概率不会走索引,而且是文件排序,因为回表代价太大,不如全表扫描。1:让其走索引,select id from emp order by name limit 90000, 5; 之后将这个表作为一个临时表,和select * from tmp 做inner join。
优化为select * from emp e inner join (select id form emp order by name limit 90000, 5) tmp on tmp.id=e.id
4:联表查询,小表驱动大表,关联字段加索引。
5:count(
)优化,在mysql自己维护行记录数,用事务保证计算正确,在redis维护,但是可能不是很准,show table states可以查看大概的行数。

索引设计法则

1:代码先行,索引后上。
2:联合索引尽量覆盖条件。
3:区分度不大的字段不要创建索引。
4:长字符串我们可以采用前缀索引。
5:where与order by冲突时优先where,where先筛选出一部分数据在排序。
6:后台监控慢sql,基于慢sql做特定的索引优化。
7:主要思想:利用一两个复杂的多字段联合索引,抗下80%的查询,碎玉剩余的20%查询建立一两个辅助查询。

相关文章:

MySQL索引相关介绍及优化(未完...)

如何看一条SQL语句的执行好坏&#xff1f; MySQL提供了自带的工具Explain可以查看sql语句的执行好坏。 explain主要的列&#xff1a; 1&#xff1a;type&#xff1a;这一列表示MySQL决定如何查找表中的行&#xff0c;查找数据行记录的大概范围。 有 system const eq_ref ref…...

【AI+教育】一些记录@2024.11.04

一、尝新 今天尝试了使用九章随时问&#xff0c;起因是看到快刀青衣的AI产品好用榜&#xff0c;里面这么介绍九章随时问&#xff1a;「它不是像其他产品那样&#xff0c;直接给你出答案。而是跟你语音对话&#xff0c;你会感觉更像是有一位老师坐在你的旁边&#xff0c;一步步…...

三维测量与建模笔记 - 2.2 射影几何

教程中H矩阵写的有问题&#xff0c;上图中H矩阵应该是&#xff08;n1) x (m1) 共点不变性,下图中黄色方块标记的点&#xff0c;在射影变换前后&#xff0c;虽然直线的形状有所变化&#xff0c;但仍然相交于同一个点。 共线不变性&#xff0c;下图黄色标记的两个点&#xff0c;在…...

论文速读:简化目标检测的无源域适应-有效的自我训练策略和性能洞察(ECCV2024)

中文标题&#xff1a;简化目标检测的无源域适应&#xff1a;有效的自我训练策略和性能洞察 原文标题&#xff1a;Simplifying Source-Free Domain Adaptation for Object Detection: Effective Self-Training Strategies and Performance Insights 1、Abstract 本文重点关注计算…...

ros与mqtt相互转换

vda5050 VDA5050协议介绍 和 详细翻译-CSDN博客 ros与mqtt相互转换 如何转换的&#xff0c;通过某个中转包&#xff0c;获取ros的消息然后以需要的格式转换为mqtt 需要的参数 ros相关 parameters[ (ros_subscriber_type, vda5050_msgs/NodeState), (ros_subscriber_queue…...

Golang | Leetcode Golang题解之第522题最长特殊序列II

题目&#xff1a; 题解&#xff1a; func isSubseq(s, t string) bool {ptS : 0for ptT : range t {if s[ptS] t[ptT] {if ptS; ptS len(s) {return true}}}return false }func findLUSlength(strs []string) int {ans : -1 next:for i, s : range strs {for j, t : range s…...

安卓开发之数据库的创建与删除

目录 前言&#xff1a;基础夯实&#xff1a;数据库的创建数据库的删除注意事项 效果展示&#xff1a;遇到问题&#xff1a;如何在虚拟机里面找到这个文件首先&#xff0c;找到虚拟机文件的位置其次&#xff0c;找到数据库文件的位置 核心代码&#xff1a; 前言&#xff1a; 安…...

数据结构:LRUCache

什么是LRUCache 首先我们来看看什么是cache 缓存&#xff08;Cache&#xff09;通常用于两个速度不同的介质之间&#xff0c;以提高数据访问的速度和效率。这里有几个典型的应用场景&#xff1a; 处理器和内存之间&#xff1a; 处理器&#xff08;CPU&#xff09;的运算速度远…...

shell脚本案例:创建用户和组

使用场景 在部署程序时&#xff0c;往往首要任务是创建用户和组。有的程序可能用到的组、用户比较多&#xff1b;且不知道服务器环境是否已经有了所需的组和用户。所以针对这个情况&#xff0c;根据Oracle RAC部署时的实际情况写了个脚本。 Linux版本 脚本代码 #!/bin/bash …...

C++笔试题之实现一个定时器

一.定时器&#xff08;timer&#xff09;的需求 1.执行定时任务的时&#xff0c;主线程不阻塞&#xff0c;所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用&#xff0c;一个timer需要能够管理多个定时任务&#xff0c;所以timer要支持增删任务…...

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-13

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…...

快消零售行业的培训创新:构建在线培训知识库

在快速消费品&#xff08;FMCG&#xff09;行业中&#xff0c;员工的培训和发展对于保持竞争力至关重要。随着电子商务的兴起和消费者行为的变化&#xff0c;快消零售行业需要不断适应新的市场趋势。在线培训知识库作为一种有效的培训工具&#xff0c;可以帮助企业提升员工技能…...

【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案

文章目录 Botpress 概述Botpress 的定位 Botpress 的主要特点1. OpenAI 集成2. 易于使用3. 定制和扩展性4. 多平台支持5. 集成和扩展 API6. 活跃的社区和详尽的文档 部署方案集成集成开发集成部署机器人示例开发工具代理本地开发先决条件从源代码构建 Botpress 如何解决常见问题…...

一文读懂系列:SSL加密流量检测技术详解

SSL加密流量检测功能的主要目的是为了对加密流量做解密处理&#xff0c;并对解密后的流量做内容安全检查&#xff08;比如反病毒、入侵防御、URL远程查询、内容过滤、文件过滤和邮件过滤等&#xff09;和审计&#xff08;防止信息泄露&#xff09;。接下来我们详细介绍SSL加密流…...

Android Studio各种历史版本

下载地址&#xff1a;AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载...

大数据导论及分布式存储HadoopHDFS入门

思维导图 数据导论 数据是什么? 进入21世纪&#xff0c;我们的生活就迈入了"数据时代" 作为21世纪的新青年&#xff0c;"数据"一词经常出现。 数据无时无刻的在影响着我们的现实生活 什么是数据&#xff1f; 数据又如何影响现实生活&#xff1f; 数据…...

语言模型的采样方法

语言模型的采样方法 语言模型的输出为一个向量&#xff0c;该向量的每一维代表着词典中对应词的概率。 在采用自回归范式的文本生成任务中&#xff0c;语言模型将依次生成一组向量并将其解码为文本。将这组向量解码为文本的过程被成为语言模型解码。 解码过程显著影响着生成文本…...

使用 Nginx 配置真实 IP 地址转发

使用 Nginx 配置真实 IP 地址转发 在许多 web 应用程序中&#xff0c;获取客户端的真实 IP 地址非常重要&#xff0c;尤其是在使用反向代理服务器&#xff08;如 Nginx&#xff09;时。本文将指导你如何在 Nginx 中配置 X-Real-IP 和 X-Forwarded-For 头部&#xff0c;以确保你…...

WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现

文章目录 1、案例效果2、案例实现1、文件创建2.代码实现3、界面与功能代码3、总结1、案例效果 提示:这里可以添加本文要记录的大概内容: 2、案例实现 1、文件创建 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 ParticleWindow.xaml,在 Models 文件夹下创建粒子…...

Oracle视频基础1.4.3练习

15个视频 1.4.3 できない dbca删除数据库 id ls cd cd dbs ls ls -l dbca# delete a database 勾选 # chris 勾选手动删除数据库 ls ls -l ls -l cd /u01/oradata ls cd /u01/admin/ ls cd chris/ ls clear 初始化参数文件&#xff0c;admin&#xff0c;数据文件#新版本了…...

身份证OCR识别接口接入实战:Python/Java/PHP/C#四语言代码示例与踩坑指南

#身份证OCR, #OCR接口, #API接入, #Python示例, #Java示例, #PHP示例, #踩坑指南, #石榴智能, #实名认证, #图片识别 身份证OCR识别接口接入实战&#xff1a;Python/Java/PHP/C#四语言代码示例与踩坑指南 作者&#xff1a;石榴智能技术团队 一、前言 身份证OCR识别已经不是什…...

AMLP框架实战:基于MACE构建高精度机器学习势函数

1. 项目概述&#xff1a;当机器学习势函数遇上自动化管道在计算化学和材料科学领域&#xff0c;我们长久以来面临着一个核心矛盾&#xff1a;精度与效率的权衡。密度泛函理论&#xff08;DFT&#xff09;能提供接近实验的精度&#xff0c;但计算成本高昂&#xff0c;通常只能处…...

基于Arduino的模块化DIY智能时钟:从RTC到RGB LED的完整实现

1. 项目概述&#xff1a;打造一台高度可定制的DIY RGB LED时钟如果你和我一样&#xff0c;对市面上千篇一律的电子钟感到审美疲劳&#xff0c;同时又对Arduino和电子DIY充满热情&#xff0c;那么这个项目可能就是为你准备的。我们不是在简单地组装一个套件&#xff0c;而是在亲…...

写论文的神助攻!好用的AI写作辅助软件,逻辑清晰质量高

作为一名刚完成毕业论文的过来人&#xff0c;我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不清、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合&#xff0c;简直是论文写作的 "开挂神器"&#xff0c;效率直接拉满&#xff…...

Owl-Alpha 新手快速上手指南

在处理大规模数据或构建高性能应用时&#xff0c;我们常常会遇到一个棘手的问题&#xff1a;如何在不阻塞主线程的情况下&#xff0c;高效地执行耗时任务&#xff1f;无论是处理图像、解析大型文件&#xff0c;还是进行复杂的数学运算&#xff0c;传统的单线程模式往往会让界面…...

37家金融客户紧急启用的DeepSeek扫描辅助加固包(含未公开API调用密钥策略)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek漏洞扫描辅助的背景与战略价值 近年来&#xff0c;大模型在安全领域的应用正从辅助问答向深度协同防御演进。DeepSeek系列模型凭借其开源、高推理精度及强代码理解能力&#xff0c;成为构建智能化漏洞…...

长期使用Token Plan套餐在项目开发中的成本观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Token Plan套餐在项目开发中的成本观察 在AI驱动的项目开发中&#xff0c;成本控制与预算管理是团队负责人必须面对的现实…...

二十六.签名与脚本(1)--脚本介绍

1.区块链脚本介绍在之前的章节中&#xff0c;我们了解了签名与验证相关&#xff0c;但是btc的交易数据&#xff0c;签名和验证&#xff0c;不是单纯的&#xff0c;还有脚本深度参与其中。我们从开始来&#xff1a;bool SendMoney(CScript scriptPubKey, int64 nValue, CWalletT…...

如何在3分钟内为任何活动搭建专业级滚动抽奖系统?Magpie-LuckyDraw全平台开源方案深度解析

如何在3分钟内为任何活动搭建专业级滚动抽奖系统&#xff1f;Magpie-LuckyDraw全平台开源方案深度解析 【免费下载链接】Magpie-LuckyDraw &#x1f3c5;A fancy lucky-draw tool supporting multiple platforms&#x1f4bb;(Mac/Linux/Windows/Web/Docker) 项目地址: https…...

如何用HsMod解锁炉石传说60+项隐藏功能:终极优化指南

如何用HsMod解锁炉石传说60项隐藏功能&#xff1a;终极优化指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx开发的炉石传说功能增强插件&#xff0c;为玩家提供…...