MySQL高级篇第一天

这篇具有很好参考价值的文章主要介绍了MySQL高级篇第一天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、索引

二、索引结构

 三、索引分类

四、索引语法

五、索引设计原则

六、视图

七、存储过程与概述

八、触发器

九、总结


一、索引

        (一)索引概述

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

MySQL高级篇第一天

 MySQL高级篇第一天

 (二)索引优点

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

MySQL高级篇第一天

(二)、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高级篇第一天

 (三)、MySQL中的B+Tree

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

MySQL高级篇第一天

 三、索引分类

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+树的基础上添加了双向链表指针,当要查询数据的时候,只需要遍历两个节点的链表指针即可获取所有的数据,提高了区间访问的性能和速度文章来源地址https://www.toymoban.com/news/detail-454316.html

到了这里,关于MySQL高级篇第一天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ⑩② 【MySQL索引】详解MySQL`索引`:结构、分类、性能分析、设计及使用规则。

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 索引 : 什么是索引(index) ? 索引(index)是帮助MySQL 高效获取数据的数据结构 (有序):在数据之外,数据库系统

    2024年02月05日
    浏览(38)
  • MySQL进阶篇:索引(概述,结构,分类,语法,SQL性能分析,索引使用,设计原则)

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

    2024年01月20日
    浏览(31)
  • MYSQL学习第一天

    create database db_name; use db_name; select database(); show create database db_name; drop database db_name;

    2024年02月13日
    浏览(30)
  • MySQL第一天

    1、下载MySQL yum源 2、安装MySQL服务端 3、启动MySQL服务 没有反应 或者没有报错 就是成功!! 4、确认MySQL服务器是否启动 5、获取初始密码 6、登录MySQL 7、修改用户密码 这里我选用的直接把主键策略改没有 这样就可以、字符长度、特殊字符了等等 8、密码设置成功了 然后就是

    2024年02月12日
    浏览(31)
  • mysql获取日期 本月 上月 下月 第一天 最后一天

    unix_timestamp()精确到秒级别,from_unixtime第一个参数只接受bigint类型 -- 本月第一天 select date_add(curdate(), interval - day(curdate()) + 1 day);   -- 本月最后一天 select last_day(curdate());   -- 上个月第一天 select date_add(curdate()-day(curdate())+1,interval -1 month);   -- 上个月最后一天 select last_day(date_a

    2024年02月12日
    浏览(46)
  • MySQL学习笔记第一天

    步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务。按键盘上的“Ctrl + Alt + Delete”组合键,打开“任务管理器”对话框,可以在“服务”列表找到“MySQL8.0”的服务,如果现在“正在运行”状态,可以右键单击服务,选择“停止”选项停止MySQL8.0的服务。 步骤2:软件的卸

    2023年04月22日
    浏览(69)
  • MySQL第一天作业 安装部署MySQL

    1、简述MySQL体系结构 MySQL最上层是连接组件。下面服务器是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。 连接组件:指的是不同语言中与SQL的交互,是第三方语言提供和数据库连接的接口。 连接池:管理缓冲用户连接,线程处理等需

    2024年02月12日
    浏览(39)
  • mysql数据库学习日记第一天

    数据库(DB):存储数据的仓库 数据库管理系统(DBMS):数据库管理系统 SQL:操纵关系数据库的一种编程语言,定义一套关于操作关系数据库的一套标准 到MYSQL官网下载即可,点击这里 注意要记住安装时设置的密码,可以设置的简单一些便于启动比如12345 要配置mysql的环境

    2024年02月10日
    浏览(35)
  • 【七天入门数据库】第一天 MySQL的安装部署

    【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 【七天入门数据库】第四天 数据操作语言DML 【七天入门数据库】第五天 MySQL的备份恢复 【七天入门数据库】第六天 MySQL的视图与索引 【七天

    2024年02月15日
    浏览(37)
  • 文件目录:FCB、索引节点、目录结构

    FCB(文件控制块): 存放控制文件需要的各种信息的数据结构,以实现按名存取。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。 FCB包含了文件的基本信息、存取控制信息、使用信息。最重要还是文件名信息和物理存放外存地址的信息,实现了文件名和文件之间

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包