mysql普通索引和联合索引测试

索引就用空间来换取时间

explain学习和参数代表的意思请参考 https://blog.csdn.net/ywdhzxf/article/details/84316712

下面我会用explain 来测试联合索引和普通索引的作用项, 只测两个字段, source和name
有兴趣的可以看下我下面的测试, 并不繁琐, 没兴趣的直接看结论吧

1 联合索引 只有命中第一个字段(索引里的顺序第一个)才会走索引, 即比如我的联合索引是name+source, 那么我只拿name当where当条件也会命中索引, 但是用source就不会了, 查询全部的数据;

2 如果只是两个字段联合查询的话, 两个字段单个查询的次数也比较高, 那么就不如直接建立两个普通索引了(我的测试用的都是等于, 如果有其他条件的命中rows较多的话还是建议联合索引, 毕竟联合索引的type优先级较高);

3 如果几个字段经常联合查询的话, 很有必要建一个联合索引, 但可以把某个单个查询应用较高的字段放在第一位, 这样也比较省索引了;

4 相同rows的情况下, type的优先级越高(type的优先级查看explain学习那篇), 查的越快;

做的简单测试, 如果不对请大神评论指导, 谢谢.

联合索引(name+source), 普通索引(source, name)

select * from db where source=1 and name=1
explain 测试:
	三个索引全部命中
	type     ref
	rows     21行

select * from db where name=1
eplain 测试:
	命中两个索引
	type     ref
	rows     30行

联合索引(name+source)

select * from db where source=1 and name=1
explain 测试:
	联合索引命中
	type     ref
	rows     21行

select * from db where name=1
eplain 测试:
	命中索引
	type     ref
	rows     30行

select * from db where source=1
explain 测试:
	没有命中索引
	type     all
	rows     10W+(所有的数据)

普通索引(source, name)

select * from db where source=1 and name=1
explain 测试:
	命中两个索引
	type     index_merge
	rows     2

select * from db where name=1
eplain 测试:
	命中索引
	type     ref
	rows     30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小僵尸打字员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值