美文网首页
Mysql优化

Mysql优化

作者: 大罡子 | 来源:发表于2018-04-15 17:35 被阅读0次

    一.索引科普

    主键索引

    唯一索引

    普通索引


    单列索引

    多列索引


    聚簇索引

    非聚簇索引


    前缀索引

    全文索引

    二.优化的指标

    1.响应事件

    2.扫描行数

    3.返回行数

    explian所关心的参数如下:

    type:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all之外,其他的type都可以使用到索引

    key:所用到的所以

    rows: 扫描行数

    三.查询优化策略

    匹配索引查询优化

    1.匹配主键,匹配唯一索引.索引的选择性越高,查询效率越高, 扫描的行数越少

    2.避免NULL值查询

       避免like查询进行全表扫描

       避免在where语句中对索引进行复杂计算; where id + 1 = 2;

    4.group by, distinct, order by, 关联查询on条件都要考虑匹配索引

    查询语句策略优化

    1.切分查询; 

        切分大数据量的in查询; 或者将in查询替换为exist语句; 用between代替in

        分解or查询为union查询

    2.分解关联查询

    3.关联查询时,分析sql的执行计划, 在连表之前进行数据过滤

    具体的业务场景下, 达到业务目的sql会有不同的实现策略(join连表查询,子查询,联合查询), 实地的分析和选择最优的sql;

    禁用select *

    使用select count(*) 统计行数

    尽量少运算

    尽量避免全表扫描,如果可以,在过滤列建立索引

    尽量避免在where子句对字段进行null判断

    尽量避免在where子句使用!= 或者<>

    尽量避免在where子句使用or连接

    尽量避免对字段进行表达式计算

    尽量避免对字段进行函数操作

    尽量避免使用不是复合索引的前缀列进行过滤连接

    尽量少排序,如果可以,建立索引

    尽量少join

    尽量用join代替子查询

    尽量避免在where子句中使用in,not in或者having,使用exists,not exists代替

    尽量避免两端模糊匹配 like %***%

    尽量用union all代替union

    尽量早过滤避免类型转换

    尽量批量insert优先优化高并发sql,而不是频率低的大sql

    尽可能对每一条sql进行explain尽可能从全局出发

    相关文章

      网友评论

          本文标题:Mysql优化

          本文链接:https://www.haomeiwen.com/subject/jcadkftx.html