zoukankan      html  css  js  c++  java
  • SQL 索引——定期维护

    B树

    索引是有序的——B树的每个节点中关键字和左右子树都是有序的。

    主索引:唯一;辅助索引:不唯一。

    非聚集索引:在索引树当中,只保存数据地址,典型的代表:MYISAM

    MYISAM:可以没有,主索引与辅助索引没区别?【只存地址】

    InnoDB:必须有主键,对查询起至关重要作用! auto increament【自增字段作为表的主键】.【辅助索引的data域存储相应记录主键的值而不是地址】【数据+地址】

    聚集索引:索引即数据,索引与数据在一起。【这种实现方式,使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引——通过辅助索引找到主键,通过主键索引到数据。】

    覆盖索引:不需要经过搜索主键索引,直接就能命中目标的索引。

    SQL插叙优化的一个重要指标:[Mysql的二级缓存:已查询sql为key,如果已查询数据的key相同,从缓存中取!]{前提是:表的结构不发生变化}

    system > const > eq_ref > ref > range > index > All

    System:查询系统内存中的数据,MYISAM中只有一条数据。

    Const:直接命中,主键和唯一索引直接命中。(=)【效率最高】

    eq_ref: 不论主键、外键,主键和外键只要是一对一的关系

    ref:非主键、非唯一索引的一对多关系

    range:是在索引上的一次范围查询

    index:是在索引上的全部扫描

    ALL:不在索引上的全表扫描,至少查两次

    索引失效问题

    【where 语句】

    【1】or的左右两边 都需要有索引,索引才能生效。

    【2】负向查询:not、!=、<>、!<、!>、not in、not like【MySQL优化器判断:全表扫描、索引扫描】


    【3】字段名不更改:【提高索引效率】,如:com = round(500) 优于 round(com)=500;

    【4】覆盖索引:ename like “%A%” 优于 “A%” 优于  ”%A“

    【5】联合索引:最左匹配原则!否则不生效。

    【6】即使完全符合索引生效的场景,考虑到实际数据量等原因——优化器的设计机制!

    字段优化;

    [1]尽可能不要留null;使用 not null

    [2]尽量使用数字字段!



    where子句优化【自右向左解析】

    【1】过滤数据量大的条件居右放置。

    【2】隐式转换问题


    散列值:不建议加索引

    连续值:加索引

  • 相关阅读:
    SQL Server 造成cpu 使用率高的 6 原因
    SQL Server SQLOS
    flask数据库操作
    redis数据类型
    python3中__get__,__getattr__,__getattribute__的区别
    强弱类型,动静态语言
    函数式编程和面向对象编程
    数据库事务的四个特性和含义
    流畅的python
    Python中__repr__和__str__区别
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/12620645.html
Copyright © 2011-2022 走看看