美文网首页
数据库索引

数据库索引

作者: 宇宙之一粟 | 来源:发表于2020-09-30 22:31 被阅读0次

    1. 为什么要使用使用索引?

    最简单的方式--全表扫描,普遍认为很慢。索引类似于字典,通过索引快速查询数据。

    2. 什么样的信息能成为索引?

    主键、唯一键以及普通键等。
    

    3. 索引的数据结构?

    • 生成索引,建立二叉查找树进行二分查找
    • 生成索引,建立B树结构进行查找
    • 生成索引,建立B+树结构进行查找
    • 生成索引,建立Hash结构进行查找

    优化你的索引结构

    1. 二叉查找树上阵

    二分查找 O(logn)

    缺点是退化成链表:O(n)

    1. B 树

    从图中可以看出,节点信息包括:关键字和指向孩子的指针

    • 根节点至少包括两个孩子

    • 树中每个节点最多含有m个孩子(m>=2)

    • 除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子

    • 所有叶子节点都位于同一层

    设计这样的原因:尽可能少IO操作

    1. B+ 树

    B+树更适合用来做存储索引:

    • B+树的磁盘读写代价更低
    • B+树的查询效率更加稳定
    • B +树更有利于对数据库的扫描
    • 适合范围查询

    Hash索引也可以考虑一下

    • 遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高

    BitMap索引是个神器

    Oracle使用,锁粒度非常大,不适合高并发系统

    4. 密集索引和稀疏索引的区别

    • 密集索引文件中的每个搜索码值都对应一个索引值
    • 稀疏索引文件只为索引码的某些值建立索引项
    .frm
    .ibd
    
    .frm
    .MYI
    .MYD
    

    1. 如何定位慢查询?

    具体场景具体分析,只提出大致思路:

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

    slow_query_log

    slow_query_log_file

    long_query_time

    SHOW STATUS like '%slow_queries%'; # 查询慢查询次数
    SET GLOBAL slow_query_log = on;
    SET GLOBAL long_query_time = 1;
    

    SELECT count(id) from person_info_large;

    SELECT name from person_info_large order by name desc;

    Explain关键字

    Explain SELECT name from person_info_large order by name desc;

    extra

    相关文章

      网友评论

          本文标题:数据库索引

          本文链接:https://www.haomeiwen.com/subject/sqipuktx.html