前言
SQL優(yōu)化是程序開發(fā)中經(jīng)常遇到的問題堡妒,尤其是在程序規(guī)模不斷擴大的時候。SQL的好壞不僅制約著程序的規(guī)模溉卓,影響著用戶的體驗涕蚤,甚至威脅著信息的安全。
我們經(jīng)常聽到說哪家平臺掛了的诵,哪家網(wǎng)站被黑了万栅,但我們不知道,其實這些平臺掛了西疤、被黑了的原因很多時候在于SQL不夠健壯烦粒。SQL不夠健壯易造成數(shù)據(jù)查詢超時、SQL注入代赁、信息泄漏等問題扰她。
SQL優(yōu)化歸根到底是SQL語句的優(yōu)化,索引的優(yōu)化芭碍。由于很多數(shù)據(jù)庫自帶的分析工具不夠強大便捷徒役,很多時候要想寫出好一點的SQL語句完全憑經(jīng)驗。這也是為什么有人說看一個程序員資歷深不深就看他寫的SQL好不好的原因窖壕。
憑經(jīng)驗做事不總是那么可靠的忧勿,況且也并不是人人都有那么多的經(jīng)驗杉女。那如果不靠經(jīng)驗,那新手怎么辦鸳吸?答熏挎,使用SOAR!
什么是SOAR
SOAR是SQL Optimizer And Rewriter的簡稱晌砾。SOAR是一個對SQL進行優(yōu)化和改寫的自動化工具坎拐,由小米人工智能與云平臺的數(shù)據(jù)庫團隊開發(fā)與維護。現(xiàn)在在GitHub上有4000多星养匈。
功能特點
SOAR有如下功能特點:
- 跨平臺支持(支持Linux,哼勇、Mac、Windows環(huán)境)
- 目前只支持 MySQL 語法族協(xié)議的SQL優(yōu)化
- 支持基于啟發(fā)式算法的語句優(yōu)化
- 支持復(fù)雜查詢的多列索引優(yōu)化(UPDATE, INSERT, DELETE, SELECT)
- 支持EXPLAIN信息豐富解讀
- 支持SQL指紋呕乎、壓縮和美化
- 支持同一張表多條ALTER請求合并
- 支持自定義規(guī)則的SQL改寫
安裝使用
SOAR支持Linux积担、Mac、Window環(huán)境楣嘁,可以在Linux磅轻、Mac珍逸、Window上安裝使用逐虚。下面以Window版本為例介紹安裝使用過程。
1谆膳、安裝Go
SOAR的使用依賴Go語言叭爱,所以在安裝使用之前,先安裝Go漱病。
Go安裝完成后买雾,在cmd中輸入 go version ,如果出現(xiàn)版本信息杨帽,則表示安裝成功漓穿。
如果報錯注盈,將將C:Goin(你的安裝路徑)加入環(huán)境變量晃危。
2、安裝SOAR
選擇windows版本下載SOAR安裝文件
將安裝文件soar.windows-amd64重命名為soar.exe老客,放置D:Program Files (x86)soar文件夾下僚饭,你也可以將這個目錄加入到環(huán)境變量中。
打開cmd胧砰,進入到soar.exe所在目錄鳍鸵,然后輸入 soar -version命令,如果出行版本信息尉间,則為安裝成功偿乖。
3、安裝Web圖形化工具
這一步不是必須的汹想,如果你喜歡命令行操作外邓,完成步驟2即可。選擇安裝Web圖形化工具古掏,只是為了方便操作损话。
安裝Web圖形化工具,可以在下面地址下載:
此Web圖形化工具依賴Python3x槽唾、Flask丧枪、PyMysql、Pycryptodome庞萍。因此拧烦,安裝此Web圖形化工具前先安裝Python3x。待Python3x完成后钝计,執(zhí)行如下命令恋博,安裝其他依賴。
pip install -r requirement.txt
待所有依賴晚裝完畢私恬,執(zhí)行如下命令债沮,啟動服務(wù)。
run.bat
如下是安裝后的效果圖:
SQL優(yōu)化分析頁面
此頁面不僅可以分析SQL本鸣、智能改寫SQL疫衩,還可以美化SQL
你可以根據(jù)分析建議優(yōu)化SQL語句
SQL優(yōu)化建議效果
此Web圖形化工具的數(shù)據(jù)庫配置配置在LocalStorage,方便操作荣德,也不增加額外負擔(dān)
數(shù)據(jù)庫配置頁面
歡迎工作一到五年的Java工程師朋友們加入Java高并發(fā): 957734884闷煤,
群內(nèi)提供免費的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)涮瞻、高性能及分布式鲤拿、Jvm性能調(diào)優(yōu)、Spring源碼署咽,MyBatis近顷,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構(gòu)資料)合理利用自己每一分每一秒的時間來學(xué)習(xí)提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰艇抠!趁年輕幕庐,使勁拼,給未來的自己一個交代家淤!