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` )

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

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

相关文章

1999-2022年上市公司员工人数数据

1999-2022年上市公司员工人数数据 1、时间:1999-2022年 2、指标:证券代码、时间、员工人数 3、来源:整理自csmar 4、范围:上市公司 5、指标解释: 上市公司员工人数是衡量公司规模和发展状的重要指标。该数据直接…

完成单位信息宣传向媒体投稿发文章任务你别一条路走到黑

有人曾言,爷叔的智慧犹如明灯,他曾这样说过:“能说服一个人的,从来不是那些长篇大论的道理,而是那堵让人碰得头破血流的南墙;能点醒一个人的,也从来不是那些空洞的说教,而是那些生活中的磨难与挫折。”这话,深深触动了我,让我想起了那一次次面对单位信息宣传投稿任务的挑战。 每…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

【二叉树】Leetcode 105. 从前序与中序遍历序列构造二叉树【中等】

从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例1: 输入: preorder [3,9,20,15,7], inorder …

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

创建spring boot+Mybatis项目全流程

创建spring bootMybatis项目全流程 第一步:打开IDEA 【New -> Project】 第二步:选择Spring Initializr 第三步:输入Name以及相关配置,可以参考截图 注意:Server URL 出可以替换为阿里云镜像【https://start.ali…

NoSQL(非关系型数据库)之Redis的简介与安装

一、简介 1.1 关系型数据库与非关系型数据库 1.1.1 概念 1.1.2 区别 1.2 非关系型数据库产生背景 1.3 redis 简介 1.4 redis 优点 1.5 redis 快的原因 二、安装 2.1 关闭核心防护 2.2 安装相关依赖 2.3 解压软件包并进行编译安装 2.4 设置 Redis 服务所需相关配置文…

赛奥分离技术现已加入2024第13届生物发酵展

参展企业介绍 上海赛奥分离技术工程有限公司成立于2010年,是上海市高新技术企业、上海市专精特新企业,宝山区工程及技术中心。公司着重于在流体分离净化领域,研究开发制造膜技术领域中错流微滤、超滤系统、纳滤系统、反渗透、精细过滤等膜分离设备及适用…

OSPF中配置静态路由实验简述

静态路由协议和OSPF(开放最短路径优先)协议是两种常见的路由协议,它们在路由选择和网络管理方面有一些区别。他们可以共存。 静态路由协议需要手动配置路由表,不会自动适应网络拓扑变化,适用于小型网络或者网络拓扑变化…

计算机缺失mfc100u.dll如何修复,分享多种靠谱的解决方法

由于各种原因,电脑在使用过程中可能会出现一些问题,其中之一就是显示mfc100u.dll缺失的错误提示。这个问题可能会导致电脑无法正常运行某些程序或功能,给用户带来困扰。为了解决这个问题,我将分享以下五种解决方法,希望…

简单的弱口令密码字典!!!

将下面的复制到文本文档即可!!! 弱口令密码字典一: %null% %username% !#$ !#$% !#$%^ !#$%^& !#$%^&* 000000 00000000 0123456789 1 101010 111 111111 1111111 11111111 1111111111 111222 112233 11223344 121212 121…

【Vue3】动态组件的使用

简言 记录下动态组件的使用。 使用场景&#xff1a;多个组件需要来回切换使用时&#xff0c;可以考虑使用动态组件。 <component> 元素 component元素一个用于渲染动态组件或元素的“元组件”。 他有一个必需的属性is,is有以下特点&#xff1a; 当 is 是字符串&#…