ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

基于mysql的SQLadvisor工具一次优化尝试

2021-05-28 16:55:40  阅读:151  来源: 互联网

标签:尝试 10 20 name 24 SQLAdvisor SQLadvisor user mysql


基于mysql的SQLadvisor工具一次优化尝试

基于mysql的SQLadvisor工具一次优化尝试

使用方式:

1 1> [root@SQLAdvisor ~]# getenforce 
2 Disabled
3 安装SQLAdvisor
4 [root@SQLAdvisor ~]# yum -y install cmake libaio-devel libffi-devel glib2 glib2-devel

 

2> 配置Percona56 yum源;

1 $ yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

 

# 安装Percona-Server-shared-56;

1 $ yum install Percona-Server-shared-56

 

3> 查看版本,测试是否安装成功。

1 [root@xjfw3 ~]# cmake --version
2 cmake version 3.10.0-rc4
3 CMake suite maintained and supported by Kitware (kitware.com/cmake).

 

4> 建立软连接

1 [root@SQLAdvisor ~]# ln -s /usr/lib64/libperconaserverclient_r.so.18 /usr/lib64/libperconaserverclient_r.so

 

5> 编译依赖项sqlparser

1 [root@SQLAdvisor ~]# cd SQLAdvisor/
2 [root@SQLAdvisor SQLAdvisor]# cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./
3 [root@SQLAdvisor SQLAdvisor]# make && make install

 

6> 安装SQLAdvisor

1 [root@SQLAdvisor SQLAdvisor]# cd sqladvisor/
2 [root@SQLAdvisor sqladvisor]# cmake -DCMAKE_BUILD_TYPE=debug ./
3 [root@SQLAdvisor sqladvisor]# make
4 [root@SQLAdvisor sqladvisor]# ./sqladvisor --help

 

#####################################自己环境下的一次测试#############################

复制代码
 1 mysql> create database test1 character set utf8mb4;
 2 Query OK, 1 row affected (0.00 sec)
 3 
 4 mysql> create table user(
 5 -> id INT PRIMARY KEY AUTO_INCREMENT,
 6 -> name VARCHAR(64) NOT NULL,
 7 -> age int,
 8 -> sex int
 9 -> )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
10 Query OK, 0 rows affected (0.13 sec)
11 
12 mysql> desc user;
13 +-------+-------------+------+-----+---------+----------------+
14 | Field | Type | Null | Key | Default | Extra |
15 +-------+-------------+------+-----+---------+----------------+
16 | id | int(11) | NO | PRI | NULL | auto_increment |
17 | name | varchar(64) | NO | | NULL | |
18 | age | int(11) | YES | | NULL | |
19 | sex | int(11) | YES | | NULL | |
20 +-------+-------------+------+-----+---------+----------------+
21 4 rows in set (0.01 sec)
22 
23 * 生成测试数据
24 mysql> insert into user(name,age, sex) select 'lisea', 25, 1;
25 Query OK, 1 row affected (0.01 sec)
26 Records: 1 Duplicates: 0 Warnings: 0
27 生产测试数据
28 insert into user(name,age, sex) select concat(name, '1'), age+1, sex+1 from user;
29 insert into user(name,age, sex) select concat(name, '2'), age+2, sex from user;
30 insert into user(name,age, sex) select concat(name, '3'), age+2, sex from user;
31 insert into user(name,age, sex) select concat(name, '10'), age+2, sex from user;
32 insert into user(name,age, sex) select concat(name, '11'), age+4, sex from user;
33 --执行两次
34 
35 结果
36 [mysql@mysql sqladvisor]$ ./sqladvisor -h 192.168.226.131 -P 16063 -u root -p '6yhn^YHN' -d test1 -q "select * from user where name = 'lisea'" -v 1
37 2019-10-24 07:36:20 35965 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `test1`.`user` where (`name` = 'lisea') 
38 2019-10-24 07:36:20 35965 [Note] 第2步:开始解析where中的条件:(`name` = 'lisea') 
39 2019-10-24 07:36:20 35965 [Note] show index from user 
40 2019-10-24 07:36:20 35965 [Note] show table status like 'user' 
41 2019-10-24 07:36:20 35965 [Note] select count(*) from ( select `name` from `user` FORCE INDEX( PRIMARY ) order by id DESC limit 10000) `user` where (`name` = 'lisea') 
42 2019-10-24 07:36:20 35965 [Note] 第3步:表user的行数:1045485,limit行数:10000,得到where条件中(`name` = 'lisea')的选择度:10000 
43 2019-10-24 07:36:20 35965 [Note] 第4步:开始验证 字段name是不是主键。表名:user 
44 2019-10-24 07:36:20 35965 [Note] show index from user where Key_name = 'PRIMARY' and Column_name ='name' and Seq_in_index = 1 
45 2019-10-24 07:36:20 35965 [Note] 第5步:字段name不是主键。表名:user 
46 2019-10-24 07:36:20 35965 [Note] 第6步:开始验证 字段name是不是主键。表名:user 
47 2019-10-24 07:36:20 35965 [Note] show index from user where Key_name = 'PRIMARY' and Column_name ='name' and Seq_in_index = 1 
48 2019-10-24 07:36:20 35965 [Note] 第7步:字段name不是主键。表名:user 
49 2019-10-24 07:36:20 35965 [Note] 第8步:开始验证表中是否已存在相关索引。表名:user, 字段名:name, 在索引中的位置:1 
50 2019-10-24 07:36:20 35965 [Note] show index from user where Column_name ='name' and Seq_in_index =1 
51 2019-10-24 07:36:20 35965 [Note] 第9步:开始输出表user索引优化建议: 
52 2019-10-24 07:36:20 35965 [Note] Create_Index_SQL:alter table user add index idx_name(name) 
53 2019-10-24 07:36:20 35965 [Note] 第10步: SQLAdvisor结束!
54 
55 也可配置文件传参调用    
56 [root@SQLAdvisor sqladvisor]# cat sql.cnf 
57 [sqladvisor]
58 username=root
59 password=123
60 host=127.0.0.1
61 port=3306
62 dbname=test1
63 sqls=select * from user where name = 'lisea'
64 [root@SQLAdvisor sqladvisor]# ./sqladvisor -f sql.cnf -v 1
复制代码

posted on 2020-06-09 21:32  数据与人文  阅读(159)  评论(0)  编辑  收藏

标签:尝试,10,20,name,24,SQLAdvisor,SQLadvisor,user,mysql
来源: https://blog.51cto.com/u_12208527/2826544

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有