数据库面试常见问题前缀索引索引下推开

数据库面试

1、前缀索引

因为可能我们索引的字段常,这既占内存空间,也不利于维护。所以我们就想,如果只把很字段的前的公共部分作为个索引,就会产超级加倍的效果。但是,我们需要注意,orderby不持前缀索引

流程是:

先计算完整列的选择性

1selectcount(distinctcol_1)/count(1)fromtable_1

再计算不同前缀度的选择性

1selectcount(distinctleft(col_1,4))/count(1)fromtable_1

找到最优度之后,创建前缀索引

1createindexidx_fronton

2.索引下推(阿社招)

MySQL5.6引了索引下推优化。默认开启,使SEToptimizer_switch=‘index_condition_pushdown=offff’;可以将其关闭。

有了索引下推优化,可以在减少回表次数;在InnoDB中只针对级索引有效;譬如,在people_table中有个级索引(zipcode,lastname,fifirstname),查询是SELECT*FROMpeopleWHEREzipcode=’′ANDlastnameLIKE‘%etrunia%’ANDaddressLIKE‘%MainStreet%’;

如果没有使索引下推技术,则MySQL会通过zipcode=’’从存储引擎中查询对应的数据,返回到MySQL服务端,然后MySQL服务端基于lastnameLIKE‘%etrunia%’andaddressLIKE‘%MainStreet%’来判断数据是否符合条件。如果使了索引下推技术,则MYSQL先会返回符合zipcode=’’的索引,然后根据lastnameLIKE‘%etrunia%’andaddressLIKE‘%MainStreet%’来判断索引是否符合条件。如果符合条件,则根据该索引来定位对应的数据,如果不符合,则直接reject掉。以上就是小科今天整理提供的MySQL面试题,希望为学习MySQL的同学提供了有用的面试素材,以后小科每日均会提供MySQL、Python及Web相关的习题。




转载请注明:http://www.aierlanlan.com/grrz/4414.html