zoukankan      html  css  js  c++  java
  • 十五、索引应用规范

    MySQL优化常用的工具

    作为面试题常考
    你做过哪些优化?
    你用过什么优化工具?
    你对索引这块怎么优化的?
    题目意思: 我们公司业务慢,请你从数据库的角度分析原因

    explain(desc)使用场景
    mysql出现性能问题,我总结有两种情况:.

    第一种情况
    应急情况:数据库突然很慢,资源耗尽
    处理过程:

    1. show processlist; 获取到导致数据库卡慢的语句
    2. explain 判断查询语句为什么慢,分析SQL的执行计划,有没有走索引,索引的类型情况
    3. 建索引,如果建完索引情况还没有改善则需要改SQL语句

    第二种情况
    一段时间慢(持续性的):

    1. 记录慢日志slowlog,分析slowlog
    2. explain 分析SQL的执行计划,有没有走索引,索引的类型情况
    3. 建索引,改语句

    索引应用规范

    DBA运维规范
    建立索引的原则
    1、建表必须要有主键,一般是无关列,自增长
    2、经常做为where条件列做为索引列,如经常使用order by group by join on, distinct子句列
    3、最好使用唯一值多的列作为联合索引第一列,其他的按照联合索引优化细节来做
    4、列值长度较长的索引列,我们建议使用前缀索引.
    5、降低索引条目,一方面不要创建没用索引,清理不常使用的索引
    percona toolkit(pt-duplicate-key-checker)工具可以检查索引应用的频率,如果少可以考虑删除索引。
    6、索引维护要避开业务繁忙期
    7、小表不需要建索引,例如几百行,几千行的表不需要创建索引

    sqlyog工具查看冗余索引


    开发规范
    不走索引的情况
    1、没有查询条件,或者查询条件没有建立索引
    select * from city; 走全表
    select * from city where 1=1; 走全表
    2、查询结果集是原表中的大部分数据,大约在25%以上,这时优化器就走全表扫描而不走索引。
    3、索引本身失效,统计数据不真实,如果对索引列频繁更新时会导致索引失效。

    面试题:同一个语句突然变慢?
    统计信息过旧,对索引列频繁更新,导致的索引自维护不及时,从而导致索引失效
    

    4、在索引列上使用函数运算,或者对索引列进行数学运算,运算包括(+,-,*,/,! 等),不会走索引

    5、隐式转换导致索引失效.
    创建xyz测试表,手机号列使用char(11)

    插入数据,可以使用字符串也可以使用int

    创建索引

    使用单引号查询跟不使用单引号都能查询到值

    可以看到,带单引号查询时要走索引

    不带单引号走全表扫描

    所以根据第4点,int类型通过函数转换成字符串,因此做了函数转换从而导致索引失效。

    6、在辅助索引中<> ,not in 不走索引,在主键索引中走range
    7、like "%aa" 百分号在最前面不走,而走全表扫描
    8、联合索引


    学习来自:郭老师博客,老男孩深标DBA课程 第四章

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    小米笔试(09-15)
    58同城笔试(09-14)
    Java中的static总结
    【Linux】常用代码
    【项目部署】上线
    入职一年高校的体会
    小团队管理总结
    从windows到Linux的再次转身,这次是硬件开发
    了解到雪花算法
    CCAI观后
  • 原文地址:https://www.cnblogs.com/tz90/p/14410020.html
Copyright © 2011-2022 走看看