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

设计一个关系型数据库

图片.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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 13,284评论 0 44
  • 前言 只有光头才能变强 索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的。 本文力求简单讲...
    Java3y阅读 8,817评论 6 109
  • Mysql概述 数据库是一个易于访问和修改的信息集合。它允许使用事务来确保数据的安全性和一致性,并能快速处理百万条...
    彦帧阅读 14,654评论 10 460
  • 数据库的基本是概念名词解释: 数据库名词解释 元组:可以理解为表的每一行就是一个元组 候选码:若关系中的某一属性组...
    杰伦哎呦哎呦阅读 4,808评论 0 6
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 8,144评论 0 8