数据库深究

*数据库的存储引擎:

 (1)InnoDB:innoDB的存储文件有两个,后缀分别为.frm和.idb,其中.frm是表的定义文件,而jdb是数据文件;InnoDB中存在表锁和行锁,不过行锁是需要在命中索引的情况下才会起作用的;InnoDB支持事务,且支持四种隔离级别

        InnoDB是以ID为索引的数据存储。采用InnoDB引擎的数据存储文件有两个,一个定义文件,一个数据文件

(2)Myisam

        Myisam 的存储文件有三个,后缀名分别是 .frm、.MYD、MYI,其中 .frm 是表的定义文件,.MYD 是数据文件,.MYI 是索引文件。Myisam 只支持表锁,且不支持事务。Myisam 由于有单独的索引文件,在读取数据方面的性能很高 。

*什么是数据库索引:

是数据库中的一个排序的数据结构,以协助快速查询、更新数据库中的数据。

索引的好处:通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性:可以大大加快数据的检索速度,这也是创建索引的最主要的原因;可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义;在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

        索引的缺点:创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

*数据库索引的分类:唯一索引,主键索引,聚合索引

       (1)唯一索引:不允许其中两行具有相同索引值的索引

        (2)主键索引:数据库表中经常有一列或列组合,其值唯一标识表中的每一行

        (3)聚合索引:在聚合索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同,一个表只能有一个聚集索引

*数据库索引的实现原理:

InnoDB存储引擎使用页作为数据读取单位,

       是使用B树及其变种B+树

        (1)B树:B树中每个节点包含了键值和键值对于得数据对象存放地址指针,所以成功搜索一个对象可以不用到达数的叶节点

在B树中查找给定关键字的方法是:首先把根节点取来,在根节点所包含的关键字k1,……Kj查找给定的关键字(可使用顺序查找或二分查找)若找到给定的关键字,则查找成功;否则,一定可以确定要查的关键字在某ki和ki+1之间,下次取pi所指向的下一层索引节点块继续查找,直到找到,或指针pi为空时查找失败

(2)B+树:B+树非叶节点中存放的关键码并不指示数据对象的地址指针,非叶节点只是索引部分。所有叶节点在同一层,包含全部关键码和相应数据对象的存放地址指针,且叶节点按照字节码的从小到大顺序连接,如果实际数据对象按加入的顺序存储而不是按关键码次数存储的话,叶节点的索引必须是稠密索引,若实际数据存储按关键码次序存放的话,叶节点索引时稀疏索引。

B+树有2个头指针,一个是树的根节点,一个是最小关键码的叶节点。而且所有叶子节点之间是一种链式环结构,因此可以对B+Tree进行两种查找运算:一种是对主键范围查找和分页查找,另一种是从根节点开始随机查找

详解:https://www.cnblogs.com/accident/p/8871811.html

B+Tree相对B-Tree的基础上有两点改变:

        (1)数据是存在叶子节点中的

        (2)数据节点之间是有指针指向的

Myisam中的B+Tree和InnoDB中的B+Tree比较:

InnoDB是以ID为索引的数据结构存储,然后在叶子节点中存储记录

        Myisam叶子节点中存放的数据是该索引对应数据记录的地址(数据索引不在一起,所以是非聚簇索引)

Mysql的优化:

  1. mysql的性能优化:组成、表的设计
    • 建立合适的索引
    • 表的设计合理
    • 字段大小事宜
  2. SQL语句优化,避免全表扫描

①建索引:一般在 where 及 order by 中涉及到的列上建索引,尽量不要对可以重复的字段建索引。

②尽量避免在 where 中使用 !(<>)或 or,也不要进行 null 值判断。

③尽量避免在 where 中对字段进行函数操作、表达式操作。

④尽量避免使用 like- %,在此种情况下可以进行全文检索。

  1. 存储引擎的选择
  2. 读写隔离分区

猜你喜欢

转载自blog.csdn.net/sinat_36722750/article/details/82822871