• 索引选择原则


    explain分析语句与profile分析
    联合索引结构与索引匹配原则
    mysql对于索引优先考虑的对象
    mysql索引的挑选原则

    explain + query语句

    explain SELECT id from products ORDER BY id LIMIT 10000000,1  
    主要看看select_type(查询类型)、type(索引类型)、key(索引),key_len(索引长度,组合索引中可以用到)、rows(找到数据前检索的行数),extra(额外信息)
    
    

    profile使用方法:

    //打开分析

    set GLOBAL profiling=1;
    

    执行查询语句:

    SELECT id from products ORDER BY id LIMIT 10000000,1 
    

    查询所有profiles

    show profiles;
    

    查看 刚才查询语句的详细分析

    show profile ALL for query 405;
    

    //关闭分析

    set global profiling=0; 
    

    联合索引结构与索引匹配原则

    最左前缀匹配原则:在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联 合索引的最左边开始匹配。

    mysql对于索引优先考虑的对象

    • 条件与分组排序共存的情况下
      当sql中where条件,分组,排序同时存在时,MySQL的优化器会优先选择条件来确定使用的索引,因为 where可以减少更多的sql扫描,而排序和分组往往进行的是全表扫描。

    • 条件与排序共存
      所有的排序都是在条件过滤之后才执行的,所以如果条件过滤了大部分数据的话,几百几千条数据进行排序其实并不是很消耗性能,即使索引优化了排序但实际提升性能很有限。

    • 对于分组和排序共存的情况下
      mysql会优先根据分组去选择索引,那是因为sql需要先将要查询的数据进行 分组,随后才会进行数据的排序。

    mysql索引的挑选原则

    字段一般是推荐重复比较少的字段影响到数据的检索,如果是项目需求(可建立联合索引)
    唯一字段可以单独建立单索引,非唯一考虑联合索引,推荐尽量使用唯一字段建立索引
    索引的个数,联合索引的个数 最佳 6个 以内,如果索引因为项目需求:最多 10个
    索引的使用遵循最左匹配原则其次覆盖索引
    尽量选择小的字段建立索引 int ,varchar(10), char(5)
    避免<,<= ,> ,>= , % ,between 这样的条件。选择索引的字段的范围和模糊之前,因为范围与模糊 会引起索引失效,针对于联合索引,就是联合索引的中间尽量不要有范围查询的字段
    尽量多使用explain分析
    避免更新频繁的字段 (二叉树会一直变化,导致性能变慢)
    建立的索引- 优先考虑 建立 联合索引
    索引字段不要有 null, 不是 ‘’

    1. 唯一字段可以建立单索引 where  id = 4  非唯一字段可以考虑建立联合索引
    2. 索引的个数与包含的字段,最佳是不超出6个,勉强可以是10个 =》 垂直分表
    3. 索引的使用遵循最左匹配原则其次就是覆盖索引
    4. 索引的选择字段尽量要小一些 int varchar(10) char(5) es 存储文本路径
    5. 避免 like between 等范围查询
    
    explain select name from staffs where name like "s%"; 可以使用到索引
    explain select * from staffs where name like "%ars%";
    explain select * from staffs where name like "%sky";
    
    6. 尽量多使用explain进行分析
    7. 优先考虑建立联合索引,索引的字段不要包含null 或者是 '';
    
  • 相关阅读:
    我已经迷失在事件环(eventloop)中了【Nodejs篇】
    canvas练手项目(二)——各种操作基础
    canvas练手项目(三)——Canvas中的Text文本
    canvas练手项目(一)——选取图片
    迭代器,生成器(generator)和Promise的“微妙”关系
    通过HTTP的HEADER完成各种骚操作
    这份Koa的简易Router手敲指南请收下
    KOA的简易模板引擎实现方式
    扒一扒PROMISE的原理,大家不要怕!
    参考KOA,5步手写一款粗糙的web框架
  • 原文地址:https://www.cnblogs.com/justsus/p/13995122.html
Copyright © 2020-2023  润新知