zoukankan      html  css  js  c++  java
  • 索引原理和慢查询优化

    1、什么是索引

    索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构
    优化查询、提升查询速度
    ps:创建完索引后会降低增、删、改的效率
    读写比列很小 不到10:1

    2、如何正确看待索引

    开发人员最懂业务,任何一个软件都有吸引用户的亮点
    亮点背后对应的是热数据,这一点开发人员最清楚
    开发人员最了解热数据对应数据库表字段有哪些,所以
    应该在开发软件的过程中就提前为相应的字段加上索引,而不是
    等到软件上线后,让DBA发现慢查询sql再做处理,因为
    ---1、一个软件慢会影响用户体验,但是慢的原因有很多,你不能立即确定是sql的问题所以等到定位到sql的问题可能已经过去好久了,问题已经被拖很久了
    ---2、因为大多数DBA都是管理型DBA而非开发型,所以即使是DBA也很难从日志上
    看到了慢查询sql也会因为不懂业务而很难分析出慢的原因,最后这个锅还得扣在开发
    的脑袋上。

    3、索引到底是一种什么样的数据结构:B+树

    二叉树、平衡二叉树、B树=》B+树
    表--》书
    记录--》一页内容

    索引--》书的目录
    
    B+树的优点
        1、在二叉树、平衡二叉树、B树的基础上做了进一步优化
        只有在叶子节点放真正的数据,这意味着在等量数据的前提下,B+树的高度是最低的
        2、B+的叶子节点都是排好序的,所以在范围查询上、B+比B更快
        快在找到一个树叶节点,就不需要从树根查起了</font>
    

    4、innodb存储引擎索引分类

    1、hash索引  k,v 类似字典形式  适合等值查询
    2、B+树索引 较常用  适合范围查询
        聚集索引/聚簇索引-》以主键字段的值作为key创建的索引(一张表只有一个)
        辅助索引:针对非主键字段创建的索引(一张表可以有多个)
            叶子节点放的是 k字段 v主键
    innodb-》索引组织表
    
    select name,age,gender from user where id =3; 主键
    select name,age,gender from user where name = 'liu';
    回表查询:通过辅助索引拿到 主键值 再回到聚集索引从根再查一遍
    覆盖索引:不需要回表就能拿到你想要的全部数据
    select name,id from user where name = 'liu';
    
    5、索引的简单使用
    
    create table t1(
        id int,
        name varchar(10),
    );
    create index ind_xxx on t1(id);
    drop index index_xxx on t1
    

    命中索引也未必能起到很好的提速效果 比如范围查询

    select count(*) from s1 where id > 3;
    1、对区分度高并且占用空间小的字段建立索引
    2、针对范围查询命中了索引,如果范围很大,查询效率依然很低,如何解决
    要么把范围缩小
    要么就分段取值,一段一段取最终把大范围取完
    3、索引下推技术(默认开启)

    4、select count(*) from where id*12 =3; 可以换成 select count(*) from where id = 3/12;
        
        不要把查询字段放到函数或者参与运算
    5、索引覆盖
    
    6、最左前缀匹配原则    联合索引
        create index idcx_id_name_gender on s1(id,name,gender);
        id
        id name
        id gender
        id name gender
        (必须有id)
  • 相关阅读:
    堆排序(改进的简单选择排序)
    希尔排序(改进的直接插入排序)
    直接插入排序
    简单选择排序
    冒泡排序&排序算法简介
    处理器的体系结构
    虚拟存储器
    Python函数
    在主项目中添加子项目
    聚合分组查询
  • 原文地址:https://www.cnblogs.com/liuyang521/p/14443730.html
Copyright © 2011-2022 走看看