mysql索引的一点小知识

是否走索引 和 数据量有关系

索引是(a,b)
查询是 select * from my_table where a=x; 可能数据量小的时候不走索引,等数据量增大了,就走索引了。

where 条件里面的字段顺序和是否走索引没有关系

上面说的主要是等值查询 例如 where field_a=1 and filed_b=2 和 where filed_b=2 and field_a=1 的索引情况是一样的
那如果是非等值索引呢?
where a=x and b>y and c=z 和 where a=x and c=z and b>y
上面两个sql 运行后的数据集肯定是一样的。那走的索引是不是一样的呢?或者换句话说 都是用and链接的条件,在包含非等值查询的时候,条件的顺序还有用么?
答案是条件的顺序无所谓。
上面那个case,最优的建立索引的顺序是 (a,c,b)

有索引(a,b,c,d)的时候

单独查询 a,(a,b) (a,b,c) (a,b,c,d) 都可以走索引;但是根据最左匹配,直接查询b,或者b,c and d,d都不能走索引。
索引查到不等值就会停下来。例如 where a=x and b>y and c=z 就只能使用ab索引

组合索引的选择率

选择率应该是最大的例如userid 之后的元素要保证 凡是等值查询的都放在前面 非等值查询的(大于小于 in)放到后面

索引是(a,b),查询条件也是 a=x and b=y 此时如果select * 就有可能不走索引。(因为回表)

在这里插入图片描述
例如上面

explain select * from employees where first_name >'a';
explain select first_name from employees where first_name >'a';

两个sql一个走索引一个不走索引,区别在哪?区别就在最终返回的结果一个只查first_name,一个需要回表查询所有字段
那有回表就一定不走索引么?
怎么可能!!
在这里插入图片描述


另外因为上面说了是否走索引 和 数据量有关系,所以大家以后测试的时候,就尽量找个大的数据集。恰好,mysql官方给我们整了一个雇员系统的db。 具体怎么用:https://zhuanlan.zhihu.com/p/293983110 记住导入mysql的时候,语法是 mysql -uxxx -pxxx < you_file_path/employees.sql

参考资料

https://heapdump.cn/article/3965201

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值