初级数据库SQL优化

SQL优化的目的:
定位到项目中执行慢且频率高的SQL让其执行的速度更快。

优化的思路:
1、 统计当前项目中SQL的执行频率;
2、 统计当前项目中SQL的执行时间;
3、 分析执行慢的原因;
4、 解决问题。
现状调查:

1、 定位那些语句执行慢(查看执行频率):
		1)show status like 'com_';  显示当前所有统计参数的值;
		2)show processlist; 查看MySql的执行情况;
2、 统计SQL的执行时间步骤:
		1)set profiling=1;  开启profiling开关
		2) 执行语句:
				show databases;
				use db_01;
				show tables;
				select * from tb_item where id < 5;
				select count(*) from tb_item;
3、 show profiles;      查看SQL语句执行的耗时情况
4、 show profile for query query_id;  查看该SQL执行过程中每个线程状态和消耗时间

原因分析:

explain 关键字 分析执行计划 示例:
	查看SQL语句的执行:
	explain select * from tb_item where id = 1;
	.........
	.........
	将需要分析的SQL前加上关键字 explain(显示的状态图)
	图片:![type状态图:](https://img-blog.csdnimg.cn/2019120422584717.PNG)
	
	type字段:
	表示连接类型,性能由好到差的连接类型常见为:range 一般,ref 好 all 待改进。

要因确认

1、如果MySQL评估使用索引比全表更慢,则不使用索引;
2、以%开头的模糊查询,索引失效;
3、尽量使用覆盖索引,避免select *;
4、不要在索引上进行运算操作,否则索引失效;
5、尽量使用复合索引,减少使用单列索引;
6、认真分析含有 is NULL, is NOT NULL, IN, NOT IN 的语句。

问题解决

举例:
1 优化 order by 语句:
优化前: explain select * from emp order by age desc;
优化后: explain select id from emp order by age desc;
2 优化 group by 语句:
优化前:explain select age,count(*) from emp group by age;
优化后:explain select age,count(*) from emp group by age order by null;
3 优化嵌套查询:
优化前:explain select * from user where id in (select user_id from user_role);
优化后:explain select * from user u, user_role ul where u.id=ul.id;
4 使用索引 USE INDEX:
优化前: explain select * from age where id = 8;
优化后:explain select * from age  use index(user_name) where id = 8;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值