zoukankan      html  css  js  c++  java
  • sql优化工具--美团SQLAdvisor

    美团点评SQL优化工具SQLAdvisor开源

                                               介绍

    在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务。例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率。

    目前常用的 SQL 优化方式包括但不限于:业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到 SQL 优化的目的。索引优化往往可以在短时间内产生非常巨大的效果。如果能够将索引优化转化成工具化、标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率。

    SQLAdvisor 是由美团点评公司北京DBA团队开发维护的 SQL 优化工具:输入SQL,输出索引优化建议。 它基于 MySQL 原生词法解析,再结合 SQL 中的 where 条件以及字段选择度、聚合条件、多表 Join 关系等最终输出最优的索引优化建议。目前 SQLAdvisor 在公司内部大量使用,较为成熟、稳定。

    现在,我们非常高兴地将 SQLAdvisor 开源,项目 GitHub 地址:https://github.com/Meituan-Dianping/SQLAdvisor 。我们已经把相关开发工作全面转到 GitHub 上,开源版本和内部使用版本保持完全一致。希望与业内有类似需求的团队,一起打造一款优秀的 SQL 优化产品。

    SQLAdvisor使用举例

    sql: SELECT id FROM crm_loan WHERE id_card = '1234567'
    cmd: ./sqladvisor -h xx -P xx -u xx -pxx -d xx -q "SELECT id FROM crm_loan WHERE id_card = '1234567'"
    SQLAdvisor输出: alter table crm_loan add index idx_id_card(id_card)
    

    SQLAdvisor快速入门教程

    SQLAdvisor的优点

    • 基于 MySQL 原生词法解析,充分保证词法解析的性能、准确定以及稳定性;
    • 支持常见的 SQL(Insert/Delete/Update/Select);
    • 支持多表 Join 并自动逻辑选定驱动表;
    • 支持聚合条件 Order by 和 Group by;
    • 过滤表中已存在的索引。

    SQLAdvisor原理介绍

    Join 处理

    1. Join语法分为两种:Join on 和 Join using,并且 Join on 有时会存在 where 条件中。
    2. 分析 Join 条件首先会得到一个 nested_join 的 table list,通过判断它的 join_using_fields 字段是否为空来区分 Join on 与 Join using。
    3. 生成的 table list 以二叉树的形式进行存储,以后序遍历的方式对二叉树进行遍历。
    4. 生成内部解析树时,right Join 会转换成 left Join。
    5. Join 条件会存在当层的叶子节点上,如果左右节点都是叶子节点,会存在右叶子节点。
    6. 每一个非叶子节点代表一次 Join 的结果。

    详细原文位置:

    http://tech.meituan.com/sqladvisor_pr.html

  • 相关阅读:
    Mongodb_文件存储
    Mongodb_技巧
    Blend_Effect
    WPF_界面_图片/界面/文字模糊解决之道整理
    ASP.NET Boilerplate 深入系列之:概述
    P1280 尼克的任务
    P1802 5倍经验日
    271. 杨老师的照相排列
    P1726 上白泽慧音
    P1983 [NOIP2013 普及组] 车站分级
  • 原文地址:https://www.cnblogs.com/cyt1153/p/6576025.html
Copyright © 2011-2022 走看看