美文网首页
关系型数据库(索引与锁)

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

作者: 磊_5d71 | 来源:发表于2019-01-03 07:18 被阅读0次

    设计一个关系型数据库

    图片.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.haomeiwen.com/subject/ymeglqtx.html