MySQL之索引详细总结

索引简介

        索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查法,这种数据结构就是索引

为什么要使用索引?

  1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

  2. 可以大大加快 数据的检索速度(大大减少的检索的数据量), 这也是创建索引的最主要的原因。

  3. 帮助服务器避免排序和临时表。

  4. 将随机IO变为顺序IO

  5. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

使用索引的注意事项

  1. 在经常需要搜索的列上,可以加快搜索的速度;

  2. 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

  3. 在经常需要排序的列上创 建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

  4. 对于中到大型表索引都是非常有效的,但是特大型表的话维护开销会很大,不适合建索引

  5. 在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度;

  6. 避免 where 子句中对字段施加函数,这会造成无法命中索引。--哪些操作会引起索引失效

  7. 在使用InnoDB时使用与业务无关的自增主键作为主键,即使用逻辑主键,而不要使用业务主键。

  8. 删除长期未使用的索引,不用的索引的存在会造成不必要的性能损耗 MySQL 5.7 可以通过查询 sys 库的 chema_unused_indexes 视图来查询哪些索引从未被使用

  9. 在使用 limit offset 查询缓慢时,可以借助索引来提高性能

索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:

索引结构描述
B+Tree索引最常见的索引类型,大部分引擎都支持B+树索引
Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询
R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于ES,Solr

索引分类

分类含义特点关键字
主键索引针对于表中主键创建的索引默认自动创建,只能有一个PRIMARY
唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQUE
常规索引快速定位特定数据可以有多个
全文索引全文索引查找的是文本中的关键词,而不是比较索引中的值可以有多个FULLTEXT

在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:

分类含义特点
聚集索引将数据存储于索引放到了一块,索引结构的叶子结点保存了行数据必须有,而且只有一个
二级索引(辅助索引或非聚集索引)将数据与索引分开存储存储,索引结构的叶子结点关联的是对应的主键可以存在多个

聚集索引选取规则

  1. 如果存在主键,主键索引就是聚集索引

  2. 如果不存在索引,将使用第一个唯一索引作为聚集索引

  3. 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引回表查询:先根据二级索引查询的聚集索引,再根据聚集索引拿到想查询的数据

索引操作

  1. 添加PRIMARY KEY(主键索引)
    ALTER TABLE `table_name` ADD PRIMARY KEY (`column`)
  2. 添加UNIQUE(唯一索引)
    ALTER TABLE `table_name` ADD UNIQUE (`column`) 
  3. 添加INDEX(普通索引)
    ALTER TABLE `table_name` ADD INDEX index_name (`column`)
  4. 添加FULLTEXT(全文索引)
    ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
  5. 添加多列索引
    ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/515823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【星计划★C语言】c语言初相识:探索编程之路

🌈个人主页:聆风吟_ 🔥系列专栏:星计划★C语言、Linux实践室 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 🔔数据单位2.2 &…

【TB作品】STM32单片机读取大气压强传感器BMP280

文章目录 读取效果kei工程使用方法接线方法源码工程下载 读取效果 kei工程 标准库&#xff1a; 使用方法 将这2个文件加入 main示例&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h" #include <stdio.h> #incl…

在线生成占位图片工具:简便快捷的设计利器

title: 在线生成占位图片工具&#xff1a;简便快捷的设计利器 date: 2024/4/4 17:36:41 updated: 2024/4/4 17:36:41 tags: 占位图片网页设计开发工具图片生成页面布局效率提升预览调整 在网页开发或设计过程中&#xff0c;经常会遇到需要临时使用占位图片的情况。占位图片是指…

flutter官方案例context_menus【搭建与效果查看】【省时】

案例地址 https://github.com/flutter/samples/tree/main/context_menus 1&#xff1a;运行查看有什么可以快捷使用的&#xff0c;更新了些什么&#xff0c;可不可以直接复制粘贴 主要内容&#xff1a;在web端中模拟手机类型的点击长按操作&#xff0c;不能直接运行在安卓与io…

专升本--python运算符总结

运算优先级 同一个等级是没有先后顺序的&#xff0c;此外&#xff0c;赋值语言的先后问题&#xff1a; 赋值的顺序从上往下&#xff0c;同一行一般都是代表同时进行赋值&#xff0c;如图所示&#xff1a; 一.and A and B&#xff0c;若A,B有任意一个为假&#xff08;0&#x…

论文笔记:Teaching Large Language Models to Self-Debug

ICLR 2024 REVIEWER打分 6666 1 论文介绍 论文提出了一种名为 Self-Debugging 的方法&#xff0c;通过执行生成的代码并基于代码和执行结果生成反馈信息&#xff0c;来引导模型进行调试不同于需要额外训练/微调模型的方法&#xff0c;Self-Debugging 通过代码解释来指导模型识…

复现k8s黄金票据学习

1.什么是黄金票据 在 Kubernetes 中&#xff0c;"黄金票据"并不是一个常见的术语。可能你想了解的是服务账户&#xff08;Service Account&#xff09;。服务账户是 Kubernetes 中用于身份验证和授权的一种机制。它们允许 Pods 或其他工作负载在 Kubernetes 集群中与…

什么是CSGO游戏搬砖及游戏搬砖注意事项?

CSGO市场是指《反恐精英&#xff1a;全球攻势》游戏内的物品交易市场。玩家可以在这个市场上买卖各类虚拟物品&#xff0c;包括武器皮肤、刀具、手套等。CSGO市场的价格是由供需关系、稀有度、流行度等多个因素影响的。 一般来说&#xff0c;稀有度较高或者比较受欢迎的物品价格…

C++类与对象的初识

面向对象关注的是一个操作需要哪些对象完成。 类是数据&#xff08;变量等&#xff09;与操作&#xff08;函数&#xff09;的集合。 &#xff08;类是对象的图纸&#xff09; 在C中&#xff0c;struct也可以内含成员函数。 调用时&#xff0c;变量名.成员-->与C中结构体…

leetcode刷题-代码训练营-第7章-回溯算法1

回溯法模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点;backtracking(路径&#xff0c;选择列表); // 递归回溯&#xff0c;撤销处理结果} }理解 从…

【逆向思考 】【拓扑排序】1591. 奇怪的打印机 II

本文涉及的知识点 逆向思考 拓扑排序 LeetCode1591. 奇怪的打印机 II 给你一个奇怪的打印机&#xff0c;它有如下两个特殊的打印规则&#xff1a; 每一次操作时&#xff0c;打印机会用同一种颜色打印一个矩形的形状&#xff0c;每次打印会覆盖矩形对应格子里原本的颜色。 一…

二、Docker部署Jenckins(详细步骤)

Docker部署Jenckins、初始化&#xff08;详细步骤&#xff09; 一、拉取镜像二、启动Jenkins三、访问Jenkins四、安装插件1.配置源2.插件安装 一、拉取镜像 docker安装教程&#xff1a;https://qingsi.blog.csdn.net/article/details/131270071 - 查询镜像 docker search jen…

通义灵码/Baidu Comate真能取代程序员吗?

目录 背景Baidu Comate通义灵码 思考 背景 Baidu Comate Baidu Comate提供AutoWork功能&#xff0c;号称“开发者只需定义需求&#xff0c;剩下的交给Comate AutoWork”。【李彦宏也说了&#xff0c;未来不会有程序员了~】 既然“Baidu Comate全新升级&#xff0c;向个人开发…

Flask Python:数据库多条件查询,flask中模型关联

前言 在上一篇Flask Python:模糊查询filter和filter_by&#xff0c;数据库多条件查询中&#xff0c;已经分享了几种常用的数据库操作&#xff0c;这次就来看看模型的关联关系是怎么定义的&#xff0c;先说基础的关联哈。在分享之前&#xff0c;先分享官方文档,点击查看 从文档…

C语言 | Leetcode C语言题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; int myAtoi(char * s){int i0;int out0;int pol1;int lenstrlen(s);if(len0) return 0;while(s[i] ) i; //删除空格if(s[i]-){ //判断正负pol-1;i;}else if(s[i]){pol1;i;}else{pol1;}while(s[i]!\0){if(s[i]<0||s[i]>9){ /…

Leetcode刷题笔记——多维动态规划篇

Leetcode刷题笔记——多维动态规划篇 第一题:最小路径和 Leetcode64&#xff1a;最小路径和&#xff1a;中等题 &#xff08;详情点击链接见原题&#xff09; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的…

【JVM】关于JVM垃圾回收

文章目录 &#x1f334;死亡对象的判断算法&#x1f338;引用计数算法&#x1f338;可达性分析算法 &#x1f333;垃圾回收算法&#x1f338;标记-清除算法&#x1f338;复制算法&#x1f338;标记-整理算法&#x1f338;分代算法&#x1f338;哪些对象会进入新生代&#xff1f…

机器学习模型——逻辑回归

https://blog.csdn.net/qq_41682922/article/details/85013008 https://blog.csdn.net/guoziqing506/article/details/81328402 https://www.cnblogs.com/cymx66688/p/11363163.html 参数详解 逻辑回归的引出&#xff1a; 数据线性可分可以使用线性分类器&#xff0c;如果…

一文搞懂cookie,session,token,JWT到底是怎么进行验证的???

文章目录 cookiesessiontokenJWT 比较 HTTP 协议是一种无状态协议&#xff0c;每次服务端接收到客户端的请求时&#xff0c;都是一个全新且独立请求&#xff0c;这样就无法获取历史请求的记录&#xff0c;为了解决这种机制&#xff0c;让某个域名下的所有网页能够共享某些数据&…