一个表test,有两字段a b,其中a表无索引,b表有索引,两个问题 :
1、执行SQL: select * from test where a=1 and b=2; b字段的索引有没有用到?
2、如果a b两个字段都有索引,执行上述SQL,b字段的索引有没有用到?请解释原因。
1、执行SQL: select * from test where a=1 and b=2; b字段的索引有没有用到?
2、如果a b两个字段都有索引,执行上述SQL,b字段的索引有没有用到?请解释原因。
调试欢乐多
会用到。2、如果a b两个字段都有索引,执行上述SQL,b字段的索引有没有用到?
不一定,可能会用A索引,也可能会用B索引,也可能两个索引 MERGE起来用。 这个关键要看数据分布。
类似问题你可以直接使用 explain select ... 得到MYSQL的执行计划。
2、具体的看条件过滤量,少的先会用到。
具体的看一下执行的计划了。explain select * from test where a=1 and a=2;
explain看看具体用到哪个
2、如果a b两个字段都有索引,执行上述SQL,b字段的索引有没有用到?
explain看看具体用到哪个
数据库具体有哪个还是要看数据库自己判断用哪个代价更小一些
1) 第一个调用api返回该范围内记录的数量。
2) 第二个调用api返回每个键值基数。
如果b上的索引基数比较大,那么就会选择b索引