关于mysql学习

news2024/10/3 0:24:08

1.索引

1.1 索引概述

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

在这里插入图片描述
左边是数据库,一共有两列七条数据,最左边是数据记录的物理地址,为了加快数据的查找,可以维护一个右边所示的二叉树,每个节点包含索引值和一个指向对应数据记录的物理地址的指针,这样就可以用二叉查找快速定位到相应的数据。

一般来说,索引本身也很大,不可能完全存储在内存中,因此索引往往是以索引文件的形式存储在磁盘上。

1.2 索引优劣势

优势

  1. 类似于书记的目录索引,提高数据检索效率,降低数据库的IO成本
  2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。

劣势

  1. 实际上索引也是一张表,该表中保存了主键和索引字段,并指向实体类的记录,所以索引也是占用空间的
  2. 虽然索引大大提高了数据查询效率,同时也降低了数据的更新速度,比如对表进行INSERT,UPDATE,DELETE,因为更新数据时,mysql不仅要保存数据,还要保存索引文件每次更新添加了索引列的字段。

1.3 索引结构

索引是在MySQL的存储引擎层实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定相同,也不是所有的存储引擎都支持所有的索引类型。MySQL目前提供了以下4中索引:

  • BTREE索引:最常见的索引类型,
  • HSAH索引:只有memory引擎支持
  • R_TREE索引:也叫空间索引,是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
  • Full-text索引:全文索引,MyISAM的一个特殊索引类型

我们平常说的索引,如果没有明确指明,都是指B+树。其中聚簇索引、复合索引、前缀索引、唯一索引默认都是使用B+树索引,统称为索引。

1.3.1 MySQL中的B+Tree

B+Tree的数据结构这里就不作介绍了,可以自己去了解下。
MySQL索引的数据结构对经典的B+Tree进行了优化,在原B+Tree的基础上,增加了一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。

MySQL中的B+Tree索引结构示意图:

在这里插入图片描述

B+Tree只有叶子节点保存数据。

1.4 索引分类

1.4.1 单值索引

一个索引只包含单个列,一个表可以有多个单列索引

1.4.2 唯一索引

索引列的值必须唯一,但允许有空值

1.4.3 复合索引

一个索引包含多个列

1.4.4 聚簇索引

聚簇索引就是索引结构和数据一起存放的索引。主键索引属于聚簇索引。

在MySQL中,Innodb引擎的表的.ibd文件就包含了该表的索引和数据,对于innodb引擎表来说,该表索引的每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。

1.4.5 非聚簇索引

非聚簇索引就是索引结构和数据分开存放的索引。

二级索引属于非聚簇索引。

非聚簇索引的叶子节点并不一定存放数据的指针,因为二级索引的叶子节点存放的是主键,根据主键再回表差数据。

1.4.6 覆盖索引

如果一个索引包含(或者说是覆盖)所有需要查询的字段的值,我们就称之为覆盖索引。

在innodb存储引擎中,如果不是主键索引,叶子节点存储的是主键+列值,最终还是要回表查询,也就是通过主键再查找一次,这样就会比较慢,覆盖索引就是把要查询的列和值放在一起,不用回表查询。

2. 视图

2.1 视图概述

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

视图对于普通表的优势主要包括以下几点:

  • 简单:使用视图的用户完全不用关心后面对应的表的结构、关联条件和筛选条件,对用户来说,已经是过滤好的复合条件的结果集。
  • 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某行某列,但是通过视图就可以简单是下面你。
  • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响。

3. 存储过程

3.1 存储过程和函数的概述

存储过程和函数是视线经过编译并存储在数据库中的一段sql语句的集合。调用存储过程和函数可以减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。

存储过程和函数的区别在于函数必须有返回值,而存储过程没有。

3.2 创建存储过程

delimiter $
create procedure pro_test1()
begin
	select 'Hello Mysql' ;
end$
delimiter ;

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

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

相关文章

密码技术扫盲:对称加密

个人博客 🎯 密码技术扫盲:对称加密密码技术扫盲:非对称加密密码技术扫盲:认证 人类最较真、技艺最精湛的事业是军事,密码技术最大放异彩的地方也在军事,战争中需要通过无线电或其他手段来传达指令&#…

LeetCode刷题复盘笔记—一文搞懂动态规划之309. 最佳买卖股票时机含冷冻期问题(动态规划系列第二十四篇)

今日主要总结一下动态规划的一道题目,309. 最佳买卖股票时机含冷冻期 题目:309. 最佳买卖股票时机含冷冻期 Leetcode题目地址 题目描述: 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算…

Python编程 函数的定义与参数

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.函数 1.函数例子 不会让代码重复的出现。CVout 2.函数介绍(熟悉) 3.…

如何在AdsPower中设置Oxylabs住宅代理和数据中心代理?

AdsPower是一款适用于Windows和Mac系统的浏览器管理工具,允许多用户登录。AdsPower的主要功能有多账户管理、浏览器指纹处理等。 集成操作流程 在官网(www.adspower.com/download)下载AdsPower并完成安装工作后,单击新建配置文件…

分布式文件系统之NFS

「分布式」是现在蛮流行的一个词,而其盛行,离不开底层网络通信能力的迅速发展。在文件系统这个领域,早期的分布式实现更多的是用来实现「共享」,而不是「容错」。传统的集中式文件系统允许单个系统中的多用户共享本地存储的文件&a…

SVG公众号排版 | GIF动图如何禁止循环播放?PS设置了也没用!

在SVG公众号排版中,我们经常使用到GIF动图,有些排版需求是想让GIF动图一直无限循环播放,也有其他排版需求是只想让GIF动图播放一次就停止了,这种情况我们可以通过Photoshop软件来设置GIF动图的播放次数,详见下图。 但是呢,也有一种情况,即使在Photoshop软件设置了GIF动图…

大话设计模型 Task02:策略、装饰、代理

目录一、简单工厂模式问题描述模式定义问题分析代码实现二、策略模式问题描述问题分析模式定义代码实现三、装饰模式问题描述问题分析模式定义代码实现四、代理模式问题描述问题分析模式定义代码实现五、工厂方法模式问题描述问题分析模式定义简单工厂 vs. 工厂方法代码实现一、…

上传项目代码到Github|Gitee

上传项目代码到Github|Gitee 文章目录上传项目代码到Github|Gitee1、前置准备1.1 Git 安装1.2 在 Git 中设置用户名1.2.1 为计算机上的每个存储库设置 Git 用户名1.2.2 为一个仓库设置 Git 用户名1.3 SSH免密登录1.4 Github创建一个新的仓库2、上传项目2.1 初始化本地库2.2 添加…

蓝桥杯入门即劝退(十六)查找元素范围(双解法)

欢迎关注点赞评论,共同学习,共同进步! ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章…

什么是制造业数字化转型?制造业数字化转型的核心与意义

对于生产制造企业来讲,当下如果不进行数字化转型的话,很大概率会被时代所抛弃的。为什么这么讲?因为在未来的很长一段时间,你可以充分了解到,数字化转型已然成为了制造业向前的主旋律。既然数字化势在必行,…

可以赚钱的副业项目,简单易上手兼职副业推荐

在当前的经济环境下,对每个人来说,仅仅依靠那点薪水生活是非常紧张的。为了改善你的生活,你需要找到其他赚钱的方法,在互联网上做兼职是一个不错的选择。 今天推荐几个普通人可以做的兼职副业,希望对大家有所帮助。 一…

微信公众号的文章可以修改几次?修改的步骤有哪些

许多小伙伴们在运营微信公众号的时候,可能会遇到过这些难题,在发布微信公众号之前检查没有检查好,导致有错字或者是错句。有的时候可能配图还会配错! 今天伯乐网络传媒就给大家带来一些实用的东西,比如微信公众号可以…

深入理解 Python 的对象拷贝和内存布局

深入理解 Python 的对象拷贝和内存布局 前言 在本篇文章当中主要给大家介绍 python 当中的拷贝问题,话不多说我们直接看代码,你知道下面一些程序片段的输出结果吗? a [1, 2, 3, 4] b a print(f"{a } \t|\t {b }") a[0] 100…

微信小程序的自定义组件(1)

文章目录1. 自定义组件2. 组件样式3. 组件-数据、方法和属性4. 组件数据监听器5. 组件纯数据字段1. 自定义组件 Component(Object object) | 微信开放文档 (qq.com) 创建组件 在项目的根目录中,鼠标右键,创建components->test文件夹在新建的componen…

第十二章 计算学习理论

12.1 基础知识 计算学习理论研究的关于通过计算来进行学习的理论。即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法提供理论保证,并根据分析结果指导算法设计。 12.2 PAC学习 计算学习理论中最基本的是概率近似正确&…

点击化学染料DBCO-PEG-CY7.5|Cyanine7.5-PEG-DBCO|花青素Cyanine7.5

​DBCO-PEG-CY7.5点击化学染料其中Cy7.5 (Cyanine 7.5) 是一种发近红外(NIR)荧光的花青素荧光染料。根据磺化与否,分为普通Cy7.5和磺化Cy7.5,但常常统称为Cy7.5。 Cy7.5的消光系数高,荧光也很亮,并且对pH不…

为什么很多人转行学习Web前端技术?

为什么很多人转行学习Web前端技术?不管你是工人阶层还是服务行业,是否想过转行IT,转行IT后肯定会选择一门编程语言进行深入学习,很多转行的人基础都不是太好,不是科班出身,甚至有的是专科乃至中专,前端的H…

cuda学习笔记3——cuda常用内存相关函数及其使用示例

cuda学习笔记3——cuda常用内存相关函数及其使用示例常用的GPU内存函数cudaMalloc()cudaMemcpy()cudaFree()代码示例常用的GPU内存函数 cuda程序将系统区分成host和device,二者有各自的memory。kernel可以操作device memory,为了能很好的控制device端内…

软件测试人员去外包公司待遇怎么样?外包薪资高吗?

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 公号同名,欢迎加入我的测试交流群,我们一起交流学习! 可能…

Python基础-画图:matplotlib

Python画图主要用到matplotlib这个库。具体来说是pylab和pyplot这两个子库。这两个库可以满足基本的画图需求。 pylab神器:pylab.rcParams.update(params)。这个函数几乎可以调节图的一切属性,包括但不限于:坐标范围,axes标签字号…