您好,登錄后才能下訂單哦!
在數(shù)據(jù)庫運維過程中,優(yōu)化SQL是業(yè)務(wù)團隊與DBA團隊的日常任務(wù)。例行SQL優(yōu)化,不僅可以提升程序性能,還能夠降低線上故障的概率。
目前常用的SQL優(yōu)化方式包括但不限于:業(yè)務(wù)層優(yōu)化、SQL邏輯優(yōu)化、索引優(yōu)化等。其中索引優(yōu)化通常通過調(diào)整索引或新增索引從而達到SQL優(yōu)化的目的。索引優(yōu)化往往可以在短時間內(nèi)產(chǎn)生非常巨大的效果。如果能夠?qū)⑺饕齼?yōu)化轉(zhuǎn)化成工具化、標準化的流程,減少人工介入的工作量,無疑會大大提高DBA的工作效率
SQLAdvisor是由美團點評公司DBA團隊(北京)開發(fā)維護的SQL優(yōu)化工具:輸入SQL,輸出索引優(yōu)化建議。 它基于MySQL原生詞法解析,再結(jié)合SQL中的where條件以及字段選擇度、聚合條件、多表Join關(guān)系等最終輸出最優(yōu)的索引優(yōu)化建議。目前SQLAdvisor在公司內(nèi)部大量使用,較為成熟、穩(wěn)定。
美團點評致力于將SQLAdvisor打造成一款高智能化SQL優(yōu)化工具,選擇將已經(jīng)在公司內(nèi)部使用較為成熟的、穩(wěn)定的SQLAdvisor項目開源,github地址。希望與業(yè)內(nèi)有類似需求的團隊,一起打造一款優(yōu)秀的SQL優(yōu)化產(chǎn)品。
Usage:
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
[root@dbmon SQLAdvisor]# sqladvisor -u *** -p *** -h *** -P 6001 -d my -q "select * from my_db where port=6001" -v 1
2017-05-04 11:42:03 27943 [Note] 第1步: 對SQL解析優(yōu)化之后得到的SQL:select `*` AS `*` from `my`.`my_db` where (`port` = 6001)
2017-05-04 11:42:03 27943 [Note] 第2步:開始解析where中的條件:(`port` = 6001)
2017-05-04 11:42:03 27943 [Note] show index from my_db
2017-05-04 11:42:03 27943 [Note] show table status like 'my_db'
2017-05-04 11:42:03 27943 [Note] select count(*) from ( select `port` from `my_db` FORCE INDEX( ux_hostportservicename ) order by host DESC,port DESC limit 353) `my_db` where (`port` = 6001)
2017-05-04 11:42:03 27943 [Note] 第3步:表my_db的行數(shù):707,limit行數(shù):353,得到where條件中(`port` = 6001)的選擇度:353
2017-05-04 11:42:03 27943 [Note] 第4步:開始驗證 字段port是不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
2017-05-04 11:42:03 27943 [Note] 第5步:字段port不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] 第6步:開始驗證 字段port是不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
2017-05-04 11:42:03 27943 [Note] 第7步:字段port不是主鍵。表名:my_db
2017-05-04 11:42:03 27943 [Note] 第8步:開始驗證表中是否已存在相關(guān)索引。表名:my_db, 字段名:port, 在索引中的位置:1
2017-05-04 11:42:03 27943 [Note] show index from my_db where Column_name ='port' and Seq_in_index =1
2017-05-04 11:42:03 27943 [Note] 第9步:開始輸出表my_db索引優(yōu)化建議:
2017-05-04 11:42:03 27943 [Note] Create_Index_SQL:alter table my_db add index idx_port(port)
2017-05-04 11:42:03 27943 [Note] 第10步: SQLAdvisor結(jié)束!
注:
利用django, bootstrap,html 來平臺化
利用python腳本等來實現(xiàn)自動化
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。