zoukankan      html  css  js  c++  java
  • 复习3

    b+ 树

        b是balance   平衡的意思

            为了保证每个数据查找经历的IO次数都 相同

        只在叶子节点存储数据  

            为了降低树的高度

        叶子节点之间加入了双向连接

            为了查找范围的时候比较快

    聚集索引(聚簇索引)

        全表的数据都存储在叶子节点上Innodb   存储引擎中的主键

    非聚集索引(非聚簇索引)/辅助索引

        叶子节点不存放具体的正行数据,而是存储这一行的主键的值

    索引的创建和删除

        create   index   ind_name    on   字段(字段名);

        create    index     ind_name    on  字段(字段名1,字段名2);

        drop    index    索引名      on     表名:

    正确的使用mysql数据库

        从库的角度  

            搭建集群

            读写分离

            分库

        从表的角度

            合理安排表与表之间的关系:改拆的拆,该合的合

            把固定长度的字段放在前面

            尽量使用char而不是varchar

        从操作数据的角度

            尽量在where字段就约束数值到一个比较小的范围:分页

                where  a   between     values1    and    values2;  

            尽量使用连表查询代替子查询

            删除数据和修改数据的时候条件尽量使用主键

            合理的创建和使用索引

                创建索引

                  1.选择区分度比较大的列

                  2.尽量选择短的字段创建索引

                  3.不要创建不必要的索引,及时删除不用的索引

                使用索引

                  1.查询的字段不是索引字段

                  2.在条件中使用范围,结果的范围越大速度越慢,范围越小速度越快

                  3.like   'a%'  命中索引,   like    '%a'   不命中索引   

                  4.条件列不能参与计算/不能使用函数

                  5.and/or

                      and条件相连  有一列有索引都会命中

                      or条件相连   所有列都有索引才能命中

                  6.联合索引

                      遵循最左前缀原则,且从出现范围开始索引失效

                      create    index    mix_ind    on      表(id ,name,email);

                      select    *    from   表     where    id =123;  命中索引

                      select    *    from     表     where     id> 123;不命中索引

                      select   *     from    表      where    id=123    and    name = ‘alex’;命中索引

                      select   *     from    表      where    id>123    and    name = ‘alex’;不命中索引(有范围)

                      select    *    from     表       where    id  =  123    and   email =  ‘alex@oldboy’;命中索引

                      select    *     from       表     where    email='alex@oldboy';   不命中索引,因为条件没有id

                      select    *    from      表       where   name =‘alex’    and     email  =  ‘alex@oldboy’;不命中索引,因为条件中没有id

                  7.条件中的数据类型和实际字段的类型必须一致

                  8.select字段中应该包含order    by中的字段

                      select    age   from    表    order   by   age;快

                      select     name      from    表     order    by    age;  慢

    覆盖索引:查询过程中不需要回表

    select     id     from    表      where   id > 1000000;

    select     max(id)     from     表    where    id> 100000;

    select    count(id)    from    表      where      id  > 10000;

    索引合并:分别创建的两个索引在某一次查询中临时合并成一个索引     a=1 or  b=2

    执行计划:explain     select   语句;   能够查看sql语句有没有按照预期执行,可以查看索引的使用情况,type等级

    慢查询优化:

        首先从sql的角度优化

            把每一句话单独执行,找到效率低的表,优化这句sql

            了解业务场景,适当创建索引,帮助查询

            尽量用连表代替子查询

            确认命中索引的情况

        考虑修改表结构

            拆表

            把固定的字段往前调整

        使用执行计划,观察sql的type通过以上调整是否提高

    mysql的慢日志

        mysql的配置中开启并设置一下

        在超过设定时间之后,这条sql总是会被记录下来

        这个时候我们可以对这些被记录的sql进行定期优化

  • 相关阅读:
    unity 凸多形顶点排序
    unity Plane
    Git MAC电脑Git使用
    Spine运行库指南
    VsCode TypeScritp整理Import
    TypeScript 扩展声明文件 .d.ts
    UnityEditor 编辑多个场景里的对象,Revert 预制件实例
    unity 球形插值
    研究生基础咨询
    ACSM-CPT 考试资料
  • 原文地址:https://www.cnblogs.com/ch2020/p/12928714.html
Copyright © 2011-2022 走看看