【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結束!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2135226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【SQL】sql優化小工具之SQLHCSQL優化
- SQL Server優化之SQL語句優化SQLServer優化
- SQL優化SQL優化
- with as優化sql優化SQL
- 效能優化案例-SQL優化優化SQL
- 使用優化實用工具來優化SQL Server效能優化SQLServer
- 資料庫優化 - SQL優化資料庫優化SQL
- sql優化之邏輯優化SQL優化
- SQL優化:limit分頁優化SQL優化MIT
- MySQL 效能優化之SQL優化MySql優化
- SQL優化--用各種hints優化一條SQLSQL優化
- 【SQL優化】SQL優化的10點注意事項SQL優化
- SQL SERVER中SQL優化SQLServer優化
- SQL優化指南SQL優化
- SQL SERVER優化SQLServer優化
- sql效能優化SQL優化
- Sql優化方法SQL優化
- oracle sql優化OracleSQL優化
- SQL優化-索引SQL優化索引
- SQL優化(一)SQL優化
- oracle sql 優化OracleSQL優化
- sql 效能優化SQL優化
- 【AUTOTRACE】SQL優化的重要工具--AUTOTRACESQL優化
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- Sql最佳化(十九) 調優工具(2)sql_traceSQL
- SQL Server SQL效能優化之引數化SQLServer優化
- 效能優化部分——高階SQL優化2優化SQL
- oracle優化一例之sql優化Oracle優化SQL
- SQL語句優化SQL優化
- MySQL-SQL優化MySql優化
- SQL優化參考SQL優化
- 慢Sql優化思路SQL優化
- sql優化專題SQL優化
- SQL效能優化技巧SQL優化
- SQL優化例項SQL優化