Mysql索引学习
mysql索引-自学版
- 1 索引语法
- 2 索引类别
- 3 索引原理
- 磁盘IO与预读
- 索引数据结构 B+树
- B+树的前生今世
- B+ 树代码(进阶)
- 4 索引使用策略及优化
- 优化索引的几种方法
- 索引常见面试题
- 面经实战
1 索引语法
索引的语法:创建、修改、增加、删除等操作,查询此链接:
菜鸟教程-MySQL 索引
or
Mysql索引(一篇就够le)
2 索引类别
mysql使用较多的存储引擎:InnoDB、MyISAM等,其中InnoDB支持的索引是B+树索引、Hash索引、全文索引,MyISAM使用的是Hash索引。
有关 mysql 所有的索引类型参考官网:
官网
我们可以按照四个角度来分类索引。
按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
按「字段个数」分类:单列索引、联合索引。
3 索引原理
以下内容(磁盘IO与预读、索引数据结构 B+树、索引使用策略及优化)学自此文章的前半部分内容:
MySQL索引原理及慢查询优化
数据库数据保存在磁盘上,且为了提高性能,每次只将部分数据读入内存,众所周知,访问磁盘的成本是访问内存的十万倍左右,因此,我们需要一种高效的搜索方式。
磁盘IO与预读
为什么访问磁盘的成本很高?访问磁盘的操作有哪几步?它们所用的时间?
考虑到磁盘IO是非常高昂的操作,操作系统做了哪些优化?
索引数据结构 B+树
根据磁盘IO的特点,我们的诉求:每次查找数据时将磁盘的IO次数控制在很小的数量级,最好是常数数量级,于是 B+ 树应运而生。
B+树的前生今世
想要介绍 B+ 树,就不得不提起二叉查找/排序树(BST)、平衡二叉树(AVL) 和 B 树这三种数据结构。B+ 树就是从它们三个演化而来的。见此文章。
二叉树、平衡二叉树、B-Tree、B+Tree 说明
此文章也讲了一系列树的演变,并且还讲解了B树的结点定义、插入、删除等的过程,以及R树,可补充看:
从B树、B+树、B*树谈到R 树
B+ 树代码(进阶)
B+树重要性不用多说,一起来研究B+树的源码
4 索引使用策略及优化
创建索引的几大原则:
1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。
3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录。
4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’)。
5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
优化索引的几种方法
源自:优化索引的几种方法
- 前缀索引优化;
- 覆盖索引优化;
- 主键索引最好是自增的;
- 防止索引失效;
索引常见面试题
来自 索引常见面试题
- 什么是索引?
- 索引的分类?(从四个角度进行分类)
- B+树索引原理?查找过程?
- 为什么 MySQL InnoDB 选择 B+tree 作为索引的数据结构?(B+树的优势)
- 联合索引?
- 什么时候需要 / 不需要创建索引?
- etc.
面经实战
- MySQL的 InnoDB 索引数据结构
- mysql中 inoodb 的索引有哪些种类
- B+树索引具体是怎么实现的
- B树与B+树的区别
- 为什么B+树的中间节点不储存数据?
- 给一个索引,在有的查询过程中他没有走索引查询,说说你能想到的原因
- 聚簇索引、非聚簇索引
- 聚簇索引比非聚簇索引的优点
相关文章:
Mysql索引学习
mysql索引-自学版 1 索引语法2 索引类别3 索引原理磁盘IO与预读索引数据结构 B树B树的前生今世B 树代码(进阶) 4 索引使用策略及优化优化索引的几种方法 索引常见面试题面经实战 1 索引语法 索引的语法:创建、修改、增加、删除等操作&#x…...
【MySQL】:高效利用MySQL函数实用指南
🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL函数概论二. 字符串函数三. 数值函数四. 日期函数五. 流程函数…...
vue3+electron开发桌面应用,静态资源处理方式及路径问题总结
目录 1、静态资源放到src/assets/目录下 2、静态路径和动态路径的写法 3、编译时vite.config.js的配置...
2024全国水科技大会暨高氨氮废水厌氧氨氧化处理技术论坛(四)
一、会议背景 为积极应对“十四五”期间我国生态环境治理面临的挑战,加快生态环境科技创新,构建绿色技术创新体系,全面落实科学技术部、生态环境部等部委编制的《“十四五”生态环境领域科技创新专项规划》,积极落实省校合作&…...
基于springboot+vue的美食推荐商城
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.02.05-2024.02.10
论文目录~ 1.ViGoR: Improving Visual Grounding of Large Vision Language Models with Fine-Grained Reward Modeling2.CLIP-Loc: Multi-modal Landmark Association for Global Localization in Object-based Maps3.Exploring Visual Culture Awareness in GPT-4V: A Compre…...
华为笔记本自带windows11如何改为win10
目录 一、前言 二、遇到问题 三、问题解决 一、前言 新购买的华为笔记本电脑自带windows11系统,虽然是正版系统,但还是希望能重新装Windows10版本。一是我已经习惯此系统,二是该系统上运行的开发工具比较稳定。 二、遇到问题 说干就干&…...
Axios 面试题
Axios 面试题 问题描述: 什么是 Axios?它的主要特点是什么? 答案: Axios 是一个基于 Promise 的 HTTP 客户端库,用于在浏览器和 Node.js 中发送 HTTP 请求。它具有以下主要特点: 支持浏览器和 Node.js 环境…...
速盾:cdn服务器怎么做
CDN(Content Delivery Network)即内容分发网络,是一种通过将内容(如网页、图片、视频等)缓存到离用户较近的服务器上,以提升用户访问速度和减轻源服务器负载的解决方案。在CDN中,CDN服务器是承担…...
基础小白快速入门c语言--
变量: 表面理解:在程序运行期间,可以改变数值的数据, 深层次含义:变量实质上代表了一块儿内存区域,我们可以将变量理解为一块儿内存区域的标识,当我们操作变量时,相当于操作了变量…...
CI/CD:安装配置Gitlab Runner
CI/CD笔记 安装配置Gitlab Runner - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136296840 Address of this art…...
【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema
【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema 一、生成Schema二、加密字段三、JSON Schema类型 从3.6版本开始,MongoDB支持根据提供的 JSON Schema验证documents的集合。在创建集合时,可以定义schema本身以及验证操作和级别&…...
用于游戏开发的顶级 PYTHON 框架
一、说明 我们试图用python开发游戏,一旦产生这个念头,就伴随这样一个问题:当今用于构建游戏的领先 Python 框架有哪些?python下,支持游戏开发平台有哪些优势?我们在这篇博文中告诉你。 二、高级游戏平台简…...
【MongoDB】docker安装mongodb 7.0
下载镜像 docker pull mongo创建本地数据存储文件夹 rootxrx:~/etc# tree mongodb/ mongodb/ └── data使用docker创建容器,并挂载配置文件,并设置密码 docker run -p 5233:27017 -v /root/etc/mongodb/data:/data/db --name mongo -e MONGO_INITDB_ROOT_USERNAMEroot -…...
win10安全中心误删文件怎么办?解析恢复与预防策略
在使用Windows 10的过程中,许多用户依赖于其内置的安全中心来保护电脑免受恶意软件的侵害。然而,有时安全中心的误判可能导致重要文件被错误地删除。当面对这种情况时,了解如何恢复误删的文件并掌握预防措施显得尤为重要。本文将为您详细解析…...
如何锁定MYSQL内存在物理内存里?
MYSQL 8.0 这个参数是 OFF 这个参数是啥意思呢? 按英文单词理解是 锁定在内存意思.突然想起来是因为 周报巡检时主库有使用SWAP内存 而从库却使用更多 使用脚本查看SWAP 进程排序 for i in cd /proc;ls |grep "^[0-9]"|awk $0 >100 ;do awk /Swap:/{aa$2} EN…...
vue菜单栏跳转方案
vue菜单栏跳转方案 <template><div><el-container style"height: 100vh"><el-aside width"200px" style"background-color: #b3c0d1"><el-menuopen"handleOpen"close"handleClose"select"h…...
科技企业如何做到FTP数据安全保护
在数字化浪潮的推动下,科技企业的数据已成为推动创新、提升效率、增强竞争力的核心资源。数据的重要性不言而喻,它不仅包含了客户信息、市场分析、产品设计等关键信息,更是企业宝贵的资产。然而,随着数据量的激增,数据…...
Ubuntu服务器fail2ban的使用
作用:限制ssh远程登录,防止被人爆破服务器,封禁登录ip 使用lastb命令可查看到登录失败的用户及ip,无时无刻的不在爆破服务器 目录 一、安装fail2ban 二,配置fail2ban封禁ip的规则 1,进入目录并创建ssh…...
全量知识系统问题及SmartChat给出的答复 之10 三套工具之5语法解析器之3
Q27. 从前面可以看出,IPP解析器给出两种文法规则,一种是人工的(文字处理和文本理解),一种是机器的(图形算法和图像处理)。前者可以是一套文写文章的注释工具的底层,可以使用颜色来着…...
进阶与总结:成为核心贡献者的路径、开源伦理与专栏知识体系复盘
进阶与总结:成为核心贡献者的路径、开源伦理与专栏知识体系复盘 从一次深夜提交被拒说起 上周三凌晨两点,我给一个嵌入式RTOS项目提交了优化中断延迟的补丁。邮件列表三小时后回复:“代码逻辑没问题,但破坏了ARM Cortex-M3的上下文对齐约定,请重新阅读porting guide第4.…...
Hexo Admin实战指南:打造高效本地Markdown博客管理后台
1. 为什么你需要Hexo Admin? 如果你正在使用Hexo搭建静态博客,肯定遇到过这样的烦恼:每次写新文章都要打开终端,输入hexo new post "文章标题",然后在生成的Markdown文件里手动编辑。这种操作不仅繁琐&…...
SenseVoiceSmall语音识别5分钟快速部署:一键开启多语言情感识别
SenseVoiceSmall语音识别5分钟快速部署:一键开启多语言情感识别 1. 为什么选择SenseVoiceSmall 语音识别技术已经发展多年,但大多数解决方案仅停留在"文字转写"层面。SenseVoiceSmall的创新之处在于,它能理解声音背后的情感和场景…...
深度拆解全连接神经网络:从结构到计算的核心原理
🔍 深度拆解全连接神经网络:从结构到计算的核心原理一、全连接神经网络:结构美学与连接规则 ✨1. 网络三层核心结构2. 神经元连接黄金规则3. 网络结构可视化(Mermaid)二、数据输入规范:只认二维矩阵的「严格…...
超轻量级AI助手nanobot:5分钟快速部署与chainlit交互体验
超轻量级AI助手nanobot:5分钟快速部署与chainlit交互体验 1. nanobot简介:极简设计的AI助手 在AI助手领域,体积庞大、资源消耗高的系统比比皆是。而nanobot却走了一条截然不同的道路——用仅约4000行代码实现了OpenClaw的核心功能ÿ…...
GitHub 高效使用指南【实战篇】
1. GitHub 入门:从注册到创建第一个仓库 刚接触GitHub时,很多人会被各种专业术语吓到。其实GitHub就像是一个代码版的社交网络,你可以在这里分享代码、学习他人项目、参与开源贡献。我刚开始用GitHub时也犯过不少错误,比如把私钥文…...
Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接淤
一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且…...
Windows 11终极优化指南:使用Win11Debloat轻松精简系统提升性能
Windows 11终极优化指南:使用Win11Debloat轻松精简系统提升性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutt…...
从PostGIS连接到热力图生成:安装完QGIS后,我建议你先配置好这5个必装插件
从PostGIS连接到热力图生成:QGIS新手必装的5个效率插件 刚装好QGIS时,面对那个简洁到近乎空旷的界面,我猜你和大多数初学者一样会愣上几秒——这玩意儿真能替代ArcGIS?直到后来偶然点开插件库,才发现自己差点错过了一个…...
EPLAN项目标准化实战:如何用结构标识符打造高效电气设计模板
EPLAN项目标准化实战:如何用结构标识符打造高效电气设计模板 电气设计领域正经历着从传统绘图向智能化管理的转型。在这个背景下,EPLAN作为行业领先的电气工程设计软件,其结构标识符功能已成为实现项目标准化的核心工具。我曾参与过多个大型工…...
