关系型数据库(索引与锁)

设计一个关系型数据库

图片.png

索引模块

  • 为什么要使用索引
    查询时间复杂度从O(n)提升到O(logn)


    图片.png

    存在以下弊端,并且会多次io,影响速度。


    图片.png

采用B Tree

  • B tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。


    图片.png

    图片.png
  • 蓝色的关键字的个数永远比黄色的孩子个数少一个

B+ Tree

图片.png

优势:
1、B+ 树磁盘读写代价更低(叶子结点有多个值, 不用频繁io读取)
2、B+ 树查询效率更加稳定(从根节点到叶子节点长度固定,时间复杂度o(log n))
3、B+ 树叶子节点有指针链接,更有利于对数据库的扫描

Hash索引

图片.png

BitMap索引

图片.png
  • 主流是B+树还有哈希索引 bitmap位图索引(锁的问题需要考虑)
  • oracle支持

密集索引与稀疏索引

区别
1、密集索引文件中每个搜索码值都对应一个索引值
2、稀疏索引只为索引码的某些值建立索引项


图片.png

如何定位并优化慢查询sql

1、根据慢日志定位慢查询sql
2、使用explain等工具分析sql
3、修改sql或者尽量让sql走索引
mysql
show variables like '%quer%';


图片.png

show status like '%slow_queries%';
set global slow_query_log = on;
set global long_query_time = '1';
使用explain select name from person order by name desc;
force index 强制使用某种索引


图片.png

联合索引最左匹配原则

图片.png

锁模块

  • MyISAM默认用的是表级锁,不支持行级锁 (锁整张表,相当于不能并发执行,读锁没有执行完毕,不能进行写锁操作)
  • InnoDB默认用的是行级锁,也支持表级锁
    mysql默认自动提交事务
    for update 或者增删改排他锁(写锁)
    查询 共享锁(读锁)


    图片.png

    图片.png

    图片.png

    图片.png
图片.png

你可能感兴趣的:(关系型数据库(索引与锁))