SQL语句优化,基本介绍
来源:互联网 发布:大数据的前景分析 编辑:程序博客网 时间:2024/06/17 15:58
使用工具找出导致速度变慢的sql语句。
1,SQL优化的一般步骤:
(1)通过show status命令了解各种SQL的执行频率。
(2)定位执行效率较低的SQL语句,重点是select语句。(核心)
(3)通过explain分析低效率的SQL语句的执行情况。
(4)确定问题并采取相应的优化措施。
面试题:SQL语句有几类?
l DDL,数据定义语言,create alterdrop
l DML,数据操作语言,insert deleteupdate
l Select
l DTL,数据事务语言,commitrollback savepoint
l DCL,数据控制语句,grant revoke
通过show status 命令,可以显示你的MySQL数据库的当前状态,我们主要关心的是以“com”开头的指令。
Show status like ‘com%’显示所有以com打头的状态。
得到状态,比如com_insert 可以指示从数据库开启到现在执行过多少次insert语句。
Show status like ‘com%’等价于show status sessionlike ‘com%’。
Session就是当前规划,指的是当前控制台启动后的数据库状态。
还有一种是:show status global like ‘com%’;这个是显示数据库从启动到查询的次数。
还有几个常用的参数便于用户了解数据库的基本情况。
Connections:试图连接MySQL服务器的次数。
Uptime:服务器工作的时间(单位秒)。
Slow_queries:慢查询的次数(默认是10)。
Connections可用于测试数据库的并发量。如果值很大的话,就要考虑并发的问题了。
9124秒
Uptime用于测试服务器到目前为止的运行时间,通常时间半年的时间就应该重启一次。
重要:slow_queries慢查询,通常默认是如果一个查询语句在数据库的查询的响应时用了10秒以上才返回,就认为是慢查询。所以说,如果这个数值越高,就说明一些查询语句是有问题的。
通常认为,一个查询超过两秒,就算慢查询。
我们优化的重点就在慢查询上,默认的慢查询时间是10秒。
通过下列语句查询慢查询的时间:show variables like ‘long_query_time’Mysql中,通过delimiter定义结束符,例如delimiter $$,把之前的结束符;改为$$,所以现在再操作数据库,这么写是不行的:select * from emp;,必须这么写:select * from emp$$。
在MySQL中自定义函数的脚本:
这个函数在给定的字符串中随机产生n个字符组成的字符串,
- select hsp(sal) from emp;
- create function rand_string(n INT)
- returns varchar(255)
- begin
- declare chars_str varchar(100) default
- 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- declare return_str varchar(255) default ";
- declare i int default 0;
- while i < n do
- set return_str = concat(return_str.substring(chars_str.floor(1+rand()*52),1));
- set i = i + 1;
- end while;
- return return_str;
- end$$
删除自定义函数:drop function rand_string。
随机产生一个数的函数:
[sql] view plaincopy
- create function rand_num()
- returns int(5)
- begin
- declare i int default 0;
- set i = floor(10+rand()*500);
- return i;
- end$$
这个函数用于产生海量数据:
- delimiter$$
- create procedure insert_emp(in start int(10),in max_num int(10))
- begin
- declare i int default 0;
- set autocommit = 0;
- repeat
- set i = i + 1;
- insert into emp values((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
- until i = max_num
- end repeat;
- commit;
- end$$
调用函数,从100001号开始,产生1800000条记录。
- delimiter;
- call insert emp(100001,1800000);
- SQL语句优化,基本介绍
- SQL语句优化,基本介绍
- MySQL优化2:SQL语句优化1-基本介绍
- SQL语句优化介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- SQL语言基本语句介绍
- sql语句性能优化介绍
- sql语句性能优化介绍
- sql语句性能优化介绍
- sql语句性能优化介绍 .
- sql语句性能优化介绍
- C++内存管理
- Ch3-6参考资料:C++的7种排序
- 执行jar 包 设置 虚拟机 参数
- js回避ie缓存的办法
- VisualSVN---You don't have permission to access on this server/Access ...forbidden
- SQL语句优化,基本介绍
- 在smarty中调用php的内置函数
- Settings 程序管理--权限信息加载
- android开发以及HelloWorld
- WIN2003下配置IIS和FTP
- 概率模型与计算机视觉
- 本人用jquery写的简明版本购物车
- 使用javaMail来发送和接收带附件的邮件
- 扫雷(java代码)