栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql学习记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql学习记录

提示:mysql学习记录

mysql学习记录
  • 一、mysql的层次结构
        • 连接层:
        • 服务层:
        • 引擎层
        • 存储层
  • 二、索引
    • 1.什么是索引?
    • 2.sql执行的先后顺序
    • 3.mysql索引的种类?
          • 单值索引:一个索引只包含单个列,一个表可以有多个单值索引
          • 唯一索引:索引列值必须唯一,但允许有空值
          • 复合索引:一个索引包含多个列
    • 4.mysql索引的结构?
          • Btree索引结构
          • B+Tree索引结构
          • 思考:为什么说B+树比B-树更适合实际应用中操作系统的文件索引和数据库索引?
  • 三、mysql优化器模块 explain
          • 怎么用?
          • 作用?
          • 各字段解释
            • id:可以理解为表执行的优先级
            • select_type
            • table :表名
            • type


一、mysql的层次结构

MySQL逻辑可分为四个层次,分别为:连接层,服务层,引擎层,存储层 。

连接层:

提供与客户端连接的服务。

当客户端发出一个请求后(如增删改查的SQL语句),首先到达该层,将服务器与客户端建立连接。
常用的与JDBC

服务层:

服务层分两个作用:
1.提供各种用户使用的接口。 如select、insert等

2.提供SQL优化器(MySQL Query Optimizer)。 SQL优化器是MySQL服务层自带的一个服务,它会自动优化用户写得不是最优的SQL,使其达到优化的效果。但由于优化器毕竟只是优化器,有时候会将用户自定义的优化方案给更改掉,从而使用户自己的优化方案失效,这一点需要注意

引擎层

引擎层提供各种数据存储的方式。MySQL的存储引擎有很多,比较常用的比如有InnoDB, MyISAM。

InnoDB与MyISAM的区别为:

InnoDB 事务优先,所以适合高并发操作,使用的是行锁

MyISAM 性能优先,适合查询多的场景,使用的是表锁

存储层

存储层

最终的数据存储在存储层。

链接: mysql中innodb和myisam对比及索引原理区别.

链接: Mysql事务以及InnoDB和MyISAM区别讲解.

二、索引 1.什么是索引?

索引是一种排好序的可以快速查找数据的数据结构

链接: 对比MyISAM与InnoDB关于锁方面的区别.

2.sql执行的先后顺序

3.mysql索引的种类? 单值索引:一个索引只包含单个列,一个表可以有多个单值索引 唯一索引:索引列值必须唯一,但允许有空值 复合索引:一个索引包含多个列

索引的用法:

4.mysql索引的结构?

mysql索引最常用的bTree索引,还包括hash索引,R-tree索引,full-text全文索引

Btree索引结构


【初始化介绍】

一颗b树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),

如磁盘块1包含数据项17和35,包含指针P1、P2、P3,

P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。

真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。

非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。

【查找过程】

如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。

真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。

B+Tree索引结构

B+TREE 第二级的 数据并不能直接取出来,只作索引使用。在内存有限的情况下,查询效率高于 B-TREE

B-TREE 第二级可以直接取出来,树形结构比较重,在内存无限大的时候有优势。

B+Tree与B-Tree 的区别:结论在内存有限的情况下,B+TREE 永远比 B-TREE好。无限内存则后者方便

1)B-树的关键字和记录是放在一起的,叶子节点可以看作外部节点,不包含任何信息;B+树叶子节点中只有关键字和指向下一个节点的索引,记录只放在叶子节点中。(一次查询可能进行两次i/o操作)

2)在B-树中,越靠近根节点的记录查找时间越快,只要找到关键字即可确定记录的存在;而B+树中每个记录的查找时间基本是一样的,都需要从根节点走到叶子节点,而且在叶子节点中还要再比较关键字。从这个角度看B-树的性能好像要比B+树好,而在实际应用中却是B+树的性能要好些。因为B+树的非叶子节点不存放实际的数据,这样每个节点可容纳的元素个数比B-树多,树高比B-树小,这样带来的好处是减少磁盘访问次数。尽管B+树找到一个记录所需的比较次数要比B-树多,但是一次磁盘访问的时间相当于成百上千次内存比较的时间,因此实际中B+树的性能可能还会好些,而且B+树的叶子节点使用指针连接在一起,方便顺序遍历(例如查看一个目录下的所有文件,一个表中的所有记录等),这也是很多数据库和文件系统使用B+树的缘故。

思考:为什么说B+树比B-树更适合实际应用中操作系统的文件索引和数据库索引?
  1. B+树的磁盘读写代价更低

B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

  1. B+树的查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

链接: 索引结构(BTree、B+Tree和Hash等)和分类(聚簇索引与非聚簇索引等).

三、mysql优化器模块 explain

怎么用?

explain + sql

作用?

各字段解释

所有字段

id:可以理解为表执行的优先级


像上图,id为2 的优先级较高,所以先执行2,也就是t3,然后优先级一样的就从上向下按照顺序执行。s1,t2

select_type


table :表名 type


优化sql的起步一般是百万数量起步,如果数据量太少优化作用不大

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358505.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号