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.mzph.cn/news/788841.shtml

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

相关文章

基于rip环境下的MGRE综合实验

实验要求 1、R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址。 2、(1)R1和R5间使用PPP的PAP认证,R5为主认证方。 (2)R2与R5之间使用ppp的CHAP认证,R5为主认证方。 &#…

YoloV8改进策略:Neck改进|GCNet(独家原创)|附结构图

摘要 本文使用GCNet注意力改进YoloV8,在YoloV8的Neck中加入GCNet实现涨点。改进方法简单易用,欢迎大家使用! 论文:《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》 非局部网络(NLNet)通过为每个查…

洛谷 P8662 [蓝桥杯 2018 省 AB] 全球变暖

题目描述 你有一张某海域 ��NN 像素的照片,. 表示海洋、 # 表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. .......其中 "上下左右" 四个方向上连在一起的一片陆地组成一座岛屿。例…

软件设计原则:依赖倒置

定义 依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计原则之一,其核心是高层模块(如业务逻辑)不应当依赖于低层模块(如具体的数据访问或设备控制实现),而是双方都…

ElasticSearch7.8的下载与安装和Kibana 7.8.0工具使用安装

1、ElasticSearch7.8.0下载 elasticsearch: 官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch 链接: https://pan.baidu.com/s/1wAKQoB3nhLhcnBlPfVOLxQ 提取码: t83n kibana: 链接: https://pan.baidu.com/s/156aD9zDdvUv8LFgDEIPoSw 提取码:…

PSCAD的使用

1. Canvas Settings中设置母线电压监测和虚拟连线十分重要。 2. Project Settings中snapshot可以实现分段仿真。 3. .out文献导出数据

操作系统—读者-写者问题及Peterson算法实现

文章目录 I.读者-写者问题1.读者-写者问题和分析2.读者—写者问题基本解法3.饥饿现象和解决方案总结 II.Peterson算法实现1.Peterson算法问题与分析(1).如何无锁访问临界区呢?(2).Peterson算法的基本逻辑(3).写对方/自己进程号的区别是? 2.只包含意向的解…

开发Vue组件库

使用脚手架新建vue项目&#xff08;以button 组件为例&#xff09; 1.新建package 文件夹&#xff0c;添加index.js 、custombutton 文件夹&#xff0c;custombutton 中 添加 custombutton .vue index.js <template><div>button</div> </template><…

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图神经网络实战&#xff08;7&#xff09;——图卷积网络详解与实现 前言1. 图卷积层2. 比较 GCN 和 GNN2.1 数据集分析2.2 实现 GCN 架构 小结系列链接 前言 图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出&#xff0c;其理念是创建一…

基于springboot+vue+Mysql的教学视频点播系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

idea使用docker将Java项目生成镜像并使用

1&#xff1a;开启docker 远程访问 使用 vim 编辑docker服务配置文件 vim /lib/systemd/system/docker.service [Service] Typenotify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not suppor…

软件设计SOLID原则

单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09; 每个类应该只有一个改变的理由&#xff0c;即一个类只负责一个功能领域中的相应职责。 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09; 软件实体&#xff08;类、模块、函数等&#…

pip/conda导出或导入环境

目录 一、pip Option1: pip freeze 导出环境 导入环境 Option2: pipreqs工具 导出环境 导入环境 二、conda Option1: requirements.txt 导出环境 导入环境 Option2: myenv.yml 导出环境 导入环境 Python提供了强大的模块功能&#xff0c;能够方便开发者更加易于…

redis-cli通过DUMP和SADD进行redis set数据类型迁移

1、DUMP指定key导出 redis-cli -h redis1.aliyuncs.com -n 1 -a abc DUMP SOL_addresses Warning: Using a password with -a or -u option on the command line interface may not be safe. "\x02A#,7tC9xSy8FZ9idnDb3e8DaXH6mQYLDWzaDovvQmYESjCQ,DCbNevBcwToUArdEDx3Q7…

思科交换机配置指引(包含安全配置部分)以 Cisco WS-C3850-48T 配置为例

思科Catalyst 3850系列交换机: 型号: Cisco WS-C3850-48T端口数: 48个10/100/1000Mbps数据端口供电方式:AC电源(支持PoE+)堆叠技术:Cisco StackWise-480,提供480Gbps的堆叠吞吐量网络模块:支持多种可选上行链路模块,包括千兆位以太网、万兆位以太网和40千兆位以太网端口…

操作系统内功篇:内存管理之虚拟内存

一 虚拟内存 在这种情况下&#xff0c;要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值&#xff0c;将会擦掉第二个程序存放在相同位置上的所有内容&#xff0c;所以同时运行两个程序是根本行不通的&#xff0c;这两个程序会立刻崩溃。 …

如何在 Ubuntu 12.04 上添加交换空间

本文涵盖的 Ubuntu 版本已不再受支持。如果您目前正在运行 Ubuntu 12.04 服务器&#xff0c;我们强烈建议升级或迁移到受支持的 Ubuntu 版本&#xff1a; 升级到 Ubuntu 14.04从 Ubuntu 14.04 升级到 Ubuntu 16.04将服务器数据迁移到受支持的版本 原因&#xff1a; Ubuntu 12…

亚远景科技-ASPICE评估目的

ASPICE评估是在特定目的的各种案例中进行的。一般来说&#xff0c;过程评估的目的是了解与评估组织单位实施的过程。 具体来说&#xff0c;根据 [ISO/IEC 33001-3.2.6] 中的定义&#xff0c;评估目的是&#xff1a; “一种声明&#xff0c;它作为评估输入信息中的一部分&#…

最简单的 AAC 音频码流解析程序

最简单的 AAC 音频码流解析程序 最简单的 AAC 音频码流解析程序原理源程序运行结果下载链接参考 最简单的 AAC 音频码流解析程序 参考雷霄骅博士的文章&#xff1a;视音频数据处理入门&#xff1a;AAC音频码流解析 本文中的程序是一个AAC码流解析程序。该程序可以从AAC码流中…

企业产品网络安全建设日志0402

文章目录 全面评估了引入短链接组件带来的风险以及替代方案301安全升级正当时 全面评估了引入短链接组件带来的风险以及替代方案 引入比较关键的组件&#xff0c;要全面评估它的安全风险和维护成本。包括它有没有公开的漏洞&#xff0c;它选用的依赖是否有缺陷&#xff0c;它的…