略html
一、拉代碼
git clone https://github.com/Meituan-Dianping/SQLAdvisor
或者下載在解壓mysql
二、裝依賴linux
apt-get install cmake libaio-dev libffi-dev apt-get install libglib2.0-dev #先裝percona軟件源 https://www.percona.com/doc/percona-server/5.6/installation/apt_repo.html wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb apt-get update apt-get install libperconaserverclient18.1-dev apt-get install g++
三、編譯依賴項sqlparsergit
cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./ make && make install
四、安裝SQLAdvisorgithub
cd sqladvisor/ cmake -DCMAKE_BUILD_TYPE=debug ./ make #報錯: /usr/include/glib-2.0/glib/gtypes.h:32:24: fatal error: glibconfig.h: No such file or directory #處理報錯 sudo find ./ iname "glibconfig.h" 2>/dev/null /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h #修改 CMakeLists.txt #include_directories("/usr/lib64/glib-2.0/include") #依據find的路徑修改成下面 include_directories("/usr/lib/x86_64-linux-gnu/glib-2.0/include") #從新編譯 rm CMakeCache.txt cmake -DCMAKE_BUILD_TYPE=debug ./ make
一、使用sql
# sqladvisor --help 用法: sqladvisor [OPTION…] sqladvisor SQL Advisor Summary 幫助選項: -?, --help 顯示幫助選項 應用程序選項: -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 #使用,注意傳參空格 ./sqladvisor -h xx -P xx -u xx -p 'xx' -d xx -q "sql" -v 1
$> 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
二、測試ubuntu
aijie@DESKTOP-N85GQN8:~/dbplat/SQLAdvisor-master/sqladvisor$ ./sqladvisor -u ajtest -p ajtest -h 127.0.0.1 -P 3306 -d ajtest -q "select * from t1 where name = 'ccc';" -v 1 2019-05-15 16:41:28 14792 [Note] 第1步: 對SQL解析優化以後獲得的SQL:select `*` AS `*` from `ajtest`.`t1` where (`name` = 'ccc') 2019-05-15 16:41:28 14792 [Note] 第2步:開始解析where中的條件:(`name` = 'ccc') 2019-05-15 16:41:28 14792 [Note] show index from t1 2019-05-15 16:41:28 14792 [Note] show table status like 't1' 2019-05-15 16:41:28 14792 [Note] select count(*) from ( select `name` from `t1` FORCE INDEX( PRIMARY ) order by id DESC limit 1) `t1` where (`name` = 'ccc') 2019-05-15 16:41:28 14792 [Note] 第3步:表t1的行數:2,limit行數:1,獲得where條件中(`name` = 'ccc')的選擇度:1 2019-05-15 16:41:28 14792 [Note] 第4步:表t1 的SQL太逆天,沒有優化建議 2019-05-15 16:41:28 14792 [Note] 第5步: SQLAdvisor結束!