问题是:如何从一个大项目中,迅速的定位执行速度慢的查询语句? 1.首先我们了解mysql数据库的一些允许状况 show session | global status like ‘uptime’ //运行的时间 session当前回话 global所有的 show status like ‘com_select’ //select命名使用的次数,update,delete,等一样 show status like connections //查询多少个链接 ----------------------------------- netstats -anb // 查询链接的详细信息 ip,端口等 ;mysql服务端口为3306 客户端随机分配端口 ------------------------------------ 2.如何定位慢查询 步骤: i:构建一个大表(400万以上数据)->用存储过程构建,要去数据贴近真实 创建表 create table dept(/*部门表*/ deptno mediumint unsigned not null default 0,//编号 unsigned 无符号整数 dname varchar(20) not null default "", //名称 loc varchar(13) not null default "",//地点 )engine=myisam default charset=utf8; --------------- create table emp(/*员工表*/ empno mediumint unsigned not null default 0,//编号 ename varchar(20) not null default "",//名字 job varchar(9) not null default "",//工作 mgr mediumint unsigned not null default 0,//上级编号 hiredate date not null,//入职时间 sal decimal(7,2) not null,//薪水 comm decimal(7,2) not null,//红利 deptno mediumint unsigend not null default 0,//部门编号 )engine=myisam default charset=utf8; ------------------ create table salgrade(/*工资级别表*/ grade mediumint unsigend not null default 0, losal decimal(17,2) not null, hisal decimal(17,2) not null, )engine=myisam default charset=utf8; ----------------- 创建函数.php ![]() ![]() ----------------------------- 举例: <?php $con=mysql_connect("localhost","root","root"); if(!$con){ die(“失败” } mysql_select_db('temp'); $sql="select rand_string(6) from dual";//dual 亚元表 > --------------------------- ii:show variables like ‘long_query’ //显示慢查询的时间是多少 set long_query_time=1 //修改慢查询时间为1s ;然后打开数据库运行一天,再查看慢查询 iii:show status like ‘slow_queries’ //显示慢查询次数 iiii:把慢查询的sql记录到日志中,默认不会打开。需要在启动mysql时候,指定慢查询记录 ![]() |
|
来自: 昵称36863495 > 《mysql》