JAVA知识点全总结——(四)数据库

上一篇:JAVA知识点全总结——(三)多线程与并发

4. 数据库

4.1 MySQL数据库原理

mysql顶层有连接池,这个类似于线程池,用来在并发的时候进行数据库的操作。当sql语句读取到Mysql中时,有一层封装层用来拆分sql语句,比在处理之后将结果返回提供给上层,做了一层封装层;在这层封装层下面是语句的过滤器,会将分段的语句过滤,如果有的地方不和语法就会报错返回;再下面是优化器,一条语句究竟用什么索引,怎么用索引,怎么去执行,在这一层会给出执行计划;在这一层还有缓存,当一条语句查询完毕后结果会存放在缓存中,如果是同样的语句那么就不会再次执行了。再下面是执行引擎,之后就是数据文件了。

4.2 索引

4.2.1 组合索引匹配规则

  • 全值匹配
  • 最左匹配
  • 左前缀也可以匹配
  • 第一个全值匹配,第二个最左匹配也可以
  • 如果要匹配范围最好把范围放在最后,范围之后的索引都不能能用
  • 如果是匹配多个单值,全部列出的情况,后面的索引还能用
  • 组合索引比单列索引需要的空间更多

4.2.2 索引优化策略

  • 判断字段的选择性,count(col distict)/count(*),尽量找选择性高的数据做索引
  • 也并不绝对,如果选择性低的字段要经常做索引,也可以加上,放在组合索引首,如果要使用则:IN(m,f)
  • 对于varchar等,最好使用前缀索引,city(7)。这个具体的长度可以通过选择性来计算获取,先计算整体的选择性,在分个计算看效率
  • 不能利用前缀索引做orderby和groupby索引,也无法使用前缀索引做覆盖扫描
  • 多个单列的效果在where中and联合查询的时候没有一个组合索引效果好,多个单列之间并不能配合。
  • OR的效率非常差,因为可能涉及到缓存和合并等操作

4.2.3 聚簇索引

  • 聚簇索引实际上是把主键和数据行存放在一起
  • 优点,快速
  • 缺点,插入效率低下,尤其是插入的主键不是自增的时候
  • 为了防止这种主键不自增innodb有主键自动增加的设置,或者一般我们在建表的时候会增加一个id字段,这个字段每张表都有,和业务无关,专门是为了主键索引。
  • MyISAM是根据地址或者说行号确定位置,主键没有那么快速

4.2.4 覆盖索引

  • 覆盖索引指要查询的select字段包括where的查询条件全都是由索引组成的,被索引覆盖不需要回表
  • 尽量避免查询select *,无法用索引来覆盖。不能再索引中含有通配符开头的like,因为索引查不中
  • 在处理大量数据,比如limit 10000,10的时候用覆盖索引,避免回表

4.2.3 索引优化排序

  • order by中的字段要和索引一一对应才行,而且同时采用一种排序方法 否则不能利用索引
  • 索引的第一个字段也可以在where子句中做等值的常量,后几个字段在orderby中做排序
  • limit先用一个嵌套子查询查出来需要的数据,在和原表inner join

4.3 B-Tree

B树是一种多路树,因为二叉树的搜索效率好,但是深度过深,在数据库中每一次找字节点都有可能是一次IO,所以深度对二叉树很重要,B树通过多子的规定降低了二叉树的深度。B树规定根结点的子节点个数最少为2,最多为m。这里的m是一个阶的概念,不同阶的B树不一样。非叶节点的子节点个数是2分之m到m,这样确保了树的深度不高,一页存放的信息能一次IO读取出来。

4.4 B+Tree

B+树和B树差不多,除了B+树为所有叶子结点增加一个链指针,而且所有关键字都在叶子结点出现。B+tree的磁盘读写代价更低,没有了中间索引,可以放下更多的数据,而且范围查找的时候从链表开始走,快的不行。

4.5 事务处理

4.5.1 ACID

ACID是事务的四大特性,想要成为事务,必须具备这四点。事务具有一起成功一起失败的特点。Atomicity:原子性体现在对于一个事务来讲,要么一起执行成功要么一起失败,执行的过程中是不能被打断或者执行其他操作的。Consistency࿱

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值