mysql 第五讲
回到主键索引树搜索的过程,我们称为回表 。
有没有可能经过索引优化,避免回表过程呢?
覆盖索引
如果执行的语句是select ID(主键) from T where k between 3 and 5,这时只需要查ID的值,而ID的值 已经在k索引树上了。就可以直接使用结果。
是否有必要将身份 证号和名字建立联合索引?
如果现在有一个高频请求,要根据市民的身份证号查询他的姓名,这个联合索引就有意义了 。可以在这个高频请求上用覆盖索引。
最左前缀原则
当你的逻辑需求是查到所有名字是“张三”的人时,可以快速定位到ID4,然后向后遍历得到所有 需要的结果。
这个最左 前缀可以是联合索引的最左N个字段,也可以是字符串索引的最左M个字符。
这里我们的评估标准是,索引的复用能力。因为可以支持最左前缀,所以当已经有了(a,b)这个联 合索引后,一般就不需要单独在a上建立索引了 因此, 第一原则是,如果通过调整顺序,可 以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。
a,b的顺序?看空间,比如name>age,所以(name,age)
索引下推
InnoDB在(name,age)索引内部就判断了age是否等于10,对于不等于10的 记录,直接判断并跳过。在我们的这个例子中,只需要对ID4、ID5这两条记录回表取数据判 断,就只需要回表2次。