MySQL高级篇第一天

目录

一、索引

二、索引结构

 三、索引分类

四、索引语法

五、索引设计原则

六、视图

七、存储过程与概述

八、触发器

九、总结


一、索引

        (一)索引概述

索引是一种能够帮组Mysql高效的从磁盘上查询数据的一种数据结构,这些数据结构以某种方式引用(指向数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引,目的是为了提高查询效率。在MySQL5.5之后默认采取InnoDB作为存储引擎,InnoDB底层是采取B+树的结构来实现索引和数据的存储。如下图所示:

 

 (二)索引优点

1)查询效率高:

        通过B+树的结构来存储数据,因为B+树除了叶子节点之外,其他的节点只存储索引,不存储数据,所以可以大大减少数据检索时的磁盘IO次数,从而提升数据查询的性能;B+树在进行范围查找的时候,只要找到起始节点,然后基于叶子节点的双向链表结构往下读取即可,查询效率较高。

2)保证了数据唯一性:

        在某些情况下,我们需要保证某个字段的值是唯一的,比如用户的ID或者邮箱等。可以通过唯一索引来约束,保证数据表中的每一行数据的唯一。

3)降低CPU消耗:

   通过索引列对数据进行排序,降低数据排序成本,降低CPU的消耗

(三)索引缺点

1)占用物理空间:

        索引实际上也是一张表,该表中保存了主键和索引字段,指向实体类的记录,所以索引列也需要占用物理空间,数据库的增加、修改、删除操作,需要涉及到索引的维护,当数据量较大的情况下,索引的维护会带来较大的性能开销

2)性能降低:

        创建索引的时候,需要考虑到索引字段值的分散性,并按照索引设计原则合理创建索引,如果字段的重复数据过多,创建索引反而会造成性能降低。

二、索引结构

        索引是在MySQL的存储引擎层中实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型的。我们平常所说的索引,如果没有特别指明,都是指B+树(多路搜索树,并不一定是二叉的)结构组织的索引。其中
聚集索引、复合索引、前缀索引、唯一索引默认都是使用 B+tree 索引,统称为 索引。

(一)、BTree数据结构

例如一颗m叉的BTree树:

每个节点最多包含m个孩子。
除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子。
若根节点不是叶子节点,则至少有两个孩子。
所有的叶子节点都在同一层。
每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1] <= n <= m-1

(二)、B+Tree数据结构

B+Tree为BTree的变种,如果n叉的B+Tree树,B+Tree与BTree的区别为:
1). n叉B+Tree最多含有n个key,而BTree最多含有n-1个key。
2). B+Tree的叶子节点保存所有的key信息,依key大小顺序排列。
3). 所有的非叶子节点都可以看作是key的索引部分

 (三)、MySQL中的B+Tree

        MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针(双向链表),就形成了带有顺序指针的B+Tree,提高区间访问的性能和效率

 三、索引分类

1)主键索引:数据列不允许重复,不允许为null,一个表只能有一个主键。

2)唯一索引:数据列不允许重复,允许为null值,一个表允许多个列创建唯一索引。

3)普通索引:基本的索引类型,没有唯一性的限制,允许为Null值。

4)全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。

5)覆盖索引:查询列要被建立的索引覆盖,不必读取数据行。

6)组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并
 

四、索引语法

(一)创建索引

示例 : 为city表中的city_name字段创建索引 ;

create index idex_city_name on city(city_name);

(二)查看索引

示例:查看city表中的索引

show index from city;

(三)删除索引

示例 : 想要删除city表上的索引idx_city_name,可以操作如下:

drop index idx_city_name on city;

(四)、修改索引

1). alter table tb_name add primary key(column_list);
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
2). alter table tb_name add unique index_name(column_list);
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)
3). alter table tb_name add index index_name(column_list);
添加普通索引, 索引值可以出现多次。
4). alter table tb_name add fulltext index_name(column_list);
该语句指定了索引为FULLTEXT, 用于全文索引

五、索引设计原则

        索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引。

(一)、对于查询频率高的字段、数据量大的表建立索引

(二)、索引字段的选择,最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用、过滤效果最好的列的组合。

(三)、使用唯一索引,区分度越高,使用索引的效率越高。

(四)、遵循最左匹配原则。

创建复合索引:
CREATE INDEX idx_name_email_status ON tb_seller(NAME,email,STATUS);
就相当于
对name 创建索引 ;
对name , email 创建了索引 ;
对name , email, status 创建了索引 ;

六、视图

        视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。

七、存储过程与概述

        存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程和函数的区别在于函数必须有返回值,而存储过程没有。
函数 : 是一个有返回值的过程 ;
过程 : 是一个没有返回值的函数 ;

八、触发器

        触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

九、总结

        索引就是一种提高查询效率的数据结构,MySQL5.5以后默认都是使用InnoDB作为存储引擎,采用的是聚簇索引。由于它的底层数据结构是采用B+树。而B+树叶子节点存储所有数据,非叶子节点只存储索引,因此它的磁盘IO次数比较少,树也比较矮,查询效率非常高。并且MySQL中的B+树对原始B+树进行了优化,在原B+树的基础上添加了双向链表指针,当要查询数据的时候,只需要遍历两个节点的链表指针即可获取所有的数据,提高了区间访问的性能和速度

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

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

相关文章

用WaveNet预测(Adapted Google WaveNet-Time Series Forecasting)

目录 剧情简介: 数据来源 加载数据 分割数据和可视化 时间序列的多元波网模型:实现(多步预测) 创建模型 创建数据集 数据准备 1- Training dataset preparation 2- Validation dataset preparation Train the Model with TPU: 使用经过训练的适应Google WaveNet预测…

YOLO NAS note 1

Git Hub: https://github.com/Deci-AI/super-gradients Yolo-Nas 的代码比YOLO v8 还恐怖。之前的YOLO数据可以通过&#xff1a; coco_detection_yolo_format_train&#xff0c; 和 coco_detection_yolo_format_val 自动转。 这里写目录标题 Train数据获取数据增强训练criteri…

ChatGPT 提问,软件杂项部分

堆内存与栈内存一般分别 有多少 ChatGPT 堆内存和栈内存的大小取决于操作系统和编译器的限制以及程序的运行环境。以下是一些常见的默认大小范围&#xff0c;但请注意这些值可以因环境而异&#xff1a; 栈内存大小&#xff1a; Windows平台&#xff1a;默认情况下&#xff…

CNN实现手写数字识别(Pytorch)

CNN结构 CNN&#xff08;卷积神经网络&#xff09;主要包括卷积层、池化层和全连接层。输入数据经过多个卷积层和池化层提取图片信息后&#xff0c;最后经过若干个全连接层获得最终的输出。 CNN的实现主要包括以下步骤&#xff1a; 数据加载与预处理模型搭建定义损失函数、优…

应用现代化中的弹性伸缩

作者&#xff1a;马伟&#xff0c;青云科技容器顾问&#xff0c;云原生爱好者&#xff0c;目前专注于云原生技术&#xff0c;云原生领域技术栈涉及 Kubernetes、KubeSphere、KubeKey 等。 2019 年&#xff0c;我在给很多企业部署虚拟化&#xff0c;介绍虚拟网络和虚拟存储。 2…

微服务架构初探

大家好&#xff0c;我是易安&#xff01;我们今天来谈一谈微服务架构的前世今生。 我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出&#xff0c;他们定义了微服务是由单一应用程序构成的小服务&#xff0c;拥有自己的…

建立在Safe生态的—GameFi SocialFi双赛道项目No.1头号玩家

最近大家关注的重点在BRC-20和MEME项目&#xff0c;人们似乎更在意短期的投机回报。而在这之外&#xff0c;一个web3的游戏——No.1头号玩家却得到了大量的玩家支持。 据了解&#xff0c;No.1是一个GameFi & SocialFi的双赛道web3游戏&#xff0c;中文名称为头号玩家。它是…

光纤衰减器作用及使用说明

在光纤通信中&#xff0c;光信号的强度过大或过小都会对信号的传输和接收产生不良的影响&#xff0c;因此光衰减器在光通信系统中起到了重要的作用。那什么是光衰减器呢&#xff1f;它又有什么作用呢&#xff1f;下面跟着小易一起来了解一下吧&#xff01; 一、什么是光纤衰减…

HUSTOJ中添加初赛练习系统

文章目录 0. 基于hustoj二开的初赛练习系统&#xff0c;QQ4705852261. 主界面2. 练习界面3. 模拟考试界面4. 查看试卷回放5. 后台操作界面6. 后台试题分类-列表7.后台试题-列表8. 后台试题-添加9. 后台试卷结构-设置 0. 基于hustoj二开的初赛练习系统&#xff0c;QQ470585226 …

[笔记]渗透测试工具Burpsuit《一》Burpsuit介绍

文章目录 前言一、安装配置1.1 环境1.2 安装过程1.3 科技过程 二、常用功能2.1 Manual penetration testing features2.2 Advanced/custom automated attacks2.3 Automated scanning for vulnerabilities2.4 Productivity tools2.5 Extensions 三、拓展功能 前言 Burp Suite(b…

一、预约挂号微服务模块搭建

文章目录 一、预约挂号微服务模块搭建1、项目模块构建2、sql资源3、构建父工程&#xff08;yygh-parent&#xff09;3.1、添加配置pom.xml 4、搭建common父模块4.1、搭建common4.2、修改配置pom.xml 5、搭建common-util模块5.1、搭建common-util5.2、修改配置pom.xml5.3、添加公…

ELK的安装部署与使用

ELK的安装与使用 安装部署 部署环境&#xff1a;Elasticsearch-7.17.3 Logstash-7.17.3 Kibana-7.17.3 一、安装部署Elasticsearch 解压目录&#xff0c;进入conf目录下编辑elasticsearch.yml文件&#xff0c;输入以下内容并保存 network.host: 127.0.0.1 http.port: 9200…

计算机网络实验(ensp)-实验10:三层交换机实现VLAN间路由

目录 实验报告&#xff1a; 实验操作 1.建立网络拓扑图并开启设备 2.配置主机 1.打开PC机 配置IP地址和子网掩码 2.配置完成后点击“应用”退出 3.重复步骤1和2配置每台PC 3.配置交换机VLAN 1.点开交换机 2.输入命名&#xff1a;sys 从用户视图切换到系统视图…

Jenkins版本升级

Jenkins版本过低的时候&#xff0c;一些插件无法升级&#xff0c;会引发一系列错误&#xff0c;这个时候我们就要升级版本了 一、下载更新包 第一种方式&#xff1a;Jenkins页面下载最新包 第二种官网上下载war包(Jenkins官网) 二、打开服务器搜索jenkins.war路径 1、如果Jenk…

SQL Backup Master 6.3.6 Crack

SQL Backup Master 能够为用户将 SQL Server 数据库备份到一些简单的云存储服务中&#xff0c;例如 Dropbox、OneDrive、Amazon S3、Microsoft Azure、box&#xff0c;最后是 Google Drive。它能够将数据库备份到用户和开发者的FTP服务器上&#xff0c;甚至本地机器甚至网络服务…

这几款实用的电脑软件推荐给你

软件一&#xff1a;TeamViewer TeamViewer是一款跨平台的远程控制软件&#xff0c;它可以帮助用户远程访问和控制其他计算机、服务器、移动设备等&#xff0c;并且支持文件传输、会议功能等。 TeamViewer的主要功能包括&#xff1a; 远程控制&#xff1a;支持远程访问和控制…

HANTS时间序列滤波算法的MATLAB实现

本文介绍在MATLAB中&#xff0c;实现基于HANTS算法&#xff08;时间序列谐波分析法&#xff09;的长时间序列数据去噪、重建、填补的详细方法。 HANTS&#xff08;Harmonic Analysis of Time Series&#xff09;是一种用于时间序列分析和插值的算法。它基于谐波分析原理&#x…

自学黑客(网络安全)有哪些技巧——初学者篇

很多人说&#xff0c;要想学好黑客技术&#xff0c;首先你得真正热爱它。 热爱&#xff0c;听着多么让人激情澎湃&#xff0c;甚至热泪盈眶。 但很可惜&#xff0c;“热爱”这个词对还没入门的小白完全不管用。 如果一个人还没了解过你就说爱你&#xff0c;不是骗财就是骗色…

asp.net高校运动会管理系统的设计与实现

本高校运动会管理系统是针对我院当前运动会工作需要而开发的B/S模式的网络系统&#xff0c;涉及到运动会赛前的报名录入准备与分组编排、赛中的成绩处理、赛后的成绩汇总与团体总分的统计。它将是一个完整统一、技术先进、高效稳定、安全可靠的基于Internet/Intranet的高校运动…

Word怎么生成目录?4个方法快速生成目录!

案例&#xff1a;Word怎么生成目录 【想问下大家在使用Word时是怎么生成目录的呀&#xff1f;正在写毕业论文的我真的很急&#xff01;感谢&#xff01;】 Word作为我们常用的办公软件&#xff0c;为我们的提供了很多便利。生成目录是在Word文档中创建一个方便导航的索引。 …