mysql索引优化(一)

最近涉及一些后台优化,对mysql索引知识进行一下总结。

新建测试表

新增100000条测试数据

DROP PROCEDURE
IF
	EXISTS insert_emp;
delimiter;;
CREATE PROCEDURE insert_emp () BEGIN
	DECLARE
		i INT;
	SET i = 1;
	WHILE
			( i <= 100000 ) DO
			INSERT INTO employees ( NAME, age, position )
		VALUES
			( CONCAT( 'zhuge', i ), i, 'dev' );	
		SET i = i + 1;	
	END WHILE;	
END;;
delimiter;
CALL insert_emp ();

注意一

对两句sql语句分析

结论:尽量select需要的字段,不用select * 语句。
注意二

 尽量避免文件排序,也就是filesort,order是否走索引需要看extra列,如果只显示using filesort,那么就是没有走索引。-

例如下面这两条sql语句

 结果2中有个using filesort,所以是没有走索引的,效率比较低

两个sql语句的区别在于age和position的顺序,原因索引顺序是name,age,position。在B+树的排列中,也是按照name,age,position的顺序去排列的。name一定的情况下,age写在前面,在B+树的排列中,顺序是有序的,所以age写在前面是会走索引的。

再查看下一个例子

此时,position在前面,又不走文件排序了,是因为name和age都一定了。
MySQL支持两种方式的排序filesortindex,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低
mysql中会计算cost成本,可以通过trace去分析,trace是默认关闭,开启会影响性能,遇到需要分析的mysql语句中时可以。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值