zoukankan      html  css  js  c++  java
  • 【SQL优化】SQL优化工具

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

    1. SQLAdvisor安装
    1.1 拉取最新代码
    git clone https://github.com/Meituan-Dianping/SQLAdvisor.git

    1.2 安装依赖项
    1. yum | apt-get install cmake libaio-devel libffi-devel glib2 glib2-devel
    2. yum | apt-get install --enablerepo=Percona56 Percona-Server-shared-56

    注意
    1.跟据glib安装的路径,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的两处include_directories针对glib设置的path。glib yum 安装默认不需要修改路径
    2.编译sqladvisor时依赖perconaserverclient_r, 因此需要安装Percona-Server-shared-56。有可能需要配置软链接例如:1. cd /usr/lib64/ 2. ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so
    3.有可能需要配置percona56 yum源: yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

    1.3 编译依赖项sqlparser
    1. cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./
    2. make && make install

    注意
    1.DCMAKE_INSTALL_PREFIX为sqlparser库文件和头文件的安装目录,其中lib目录包含库文件libsqlparser.so,include目录包含所需的所有头文件。
    2.DCMAKE_INSTALL_PREFIX值尽量不要修改,后面安装依赖这个目录。

    1.4 安装SQLAdvisor源码
    1. cd SQLAdvisor/sqladvisor/
    2. cmake -DCMAKE_BUILD_TYPE=debug ./
    3. make
    4. 在本路径下生成一个sqladvisor可执行文件,这即是我们想要的。

    2. SQLAdvisor使用
    2.1 --help输出
    ./sqladvisor --help
    Usage:
    sqladvisor [OPTION...] sqladvisor

    SQL Advisor Summary

    Help Options:
    -?, --help Show help options

    Application Options:
    -f, --defaults-file sqls file
    -u, --username username
    -p, --password password
    -P, --port port
    -h, --host host
    -d, --dbname database name
    -q, --sqls sqls
    -v, --verbose 1:output logs 0:output nothing


    2.2 命令行传参调用
    ./sqladvisor -h xx -P xx -u xx -p 'xx' -d xx -q "sql" -v 1


    注意:命令行传参时,参数名与值需要用空格隔开

    2.3 配置文件传参调用
    $> cat sql.cnf
    [sqladvisor]
    username=xx
    password=xx
    host=xx
    port=xx
    dbname=xx
    sqls=sql1;sql2;sql3....

    cmd: ./sqladvisor -f sql.cnf -v 1

    输出结果:
    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)

    输出结果:
    [root@test-5-67 sqladvisor]# ./sqladvisor -h 127.0.0.1 -P 3306 -u root -p 'xxxxxxx' -d jxweb -q "select * from pro_Brand where pro_CategoryID=1" -v 1
    2017-03-13 11:05:37 21830 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `jxweb`.`pro_Brand` where (`pro_CategoryID` = 1)

    2017-03-13 11:05:37 21830 [Note] 第2步:开始解析where中的条件:(`pro_CategoryID` = 1)

    2017-03-13 11:05:38 21830 [Note] show index from pro_Brand

    2017-03-13 11:05:38 21830 [Note] show table status like 'pro_Brand'

    2017-03-13 11:05:38 21830 [Note] select count(*) from ( select `pro_CategoryID` from `pro_Brand` FORCE INDEX( PRIMARY ) order by ID DESC limit 1431) `pro_Brand` where (`pro_CategoryID` = 1)

    2017-03-13 11:05:38 21830 [Note] 第3步:表pro_Brand的行数:2862,limit行数:1431,得到where条件中(`pro_CategoryID` = 1)的选择度:2

    2017-03-13 11:05:38 21830 [Note] 第4步:表pro_Brand 的SQL太逆天,没有优化建议

    2017-03-13 11:05:38 21830 [Note] 第5步: SQLAdvisor结束!

  • 相关阅读:
    简单测试AF3.0.4
    好玩的Mac键盘
    黑盒测试和白盒测试
    iOS开发之原生二维码生成与扫描
    Swift
    JavaScript null and undefined
    java防止表单重复提交
    Java http post
    Redhat 6.5 x64 下载地址
    Spring 官方下载地址(非Maven)
  • 原文地址:https://www.cnblogs.com/hankyoon/p/6542595.html
Copyright © 2011-2022 走看看