面试中常被提到的最左前缀匹配原则

在面试过程中,面试官经常会提到一个必不可少的数据库查询策略——最左前缀匹配原则。
这一原则在MySQL的联邦索引设计中起着关键作用,它决定了查询性能和索引使用效率。
让我们仔细看看这个原理。
MySQL的索引结构通常是基于B+树的,尤其是共享索引。
当你创建像(a,b)这样的索引时,查询过程将从索引的最左边开始,按字段a排序。
查询优化器将根据这个顺序决定如何执行查询,这反映在声明类型字段中。
key_len字段揭示了所使用索引的实际长度,这对于理解查询效率至关重要。
当您创建表时,像id_name_age_index这样的复合索引实际上会为每个单独的字段创建一个独立的索引。
当您运行整数匹配查询时,无论字段的顺序如何,只要在共享索引中找到匹配项,查询就可以直接使用这些索引,大大提高了效率。
但请注意,查询优化器会根据查询的需要灵活调整字段顺序,以达到最佳性能。
执行QL(可能是SQL)语句的效率,尤其是涉及到共享索引时,会受到这个原则的影响。
例如id_name_age索引的长度为21,如果查询只需要匹配最左边的id字段,则直接使用id索引。
如果查询需要id_name或年龄范围搜索,则可能需要遵循最左匹配原则,使用id_name_age_index,但这可能会导致索引扫描而不是直接使用索引,从而影响速度,并且可能需要全表扫描。

当当前操作中遇到ID和范围搜索年龄精确匹配的情况时,只需依赖ID索引即可。
如果搜索词包含比较复杂的前缀,比如id_123,最左边的前缀匹配原则就显得尤为重要,因为查询优化器会优先使用id_前缀进行匹配,直到遇到不兼容的字段。
总的来说,最左前缀匹配原则是MySQL索引优化中的一个核心概念。
在面试中表现出对这一原则的深刻理解和实际应用无疑会增加你的技术专业知识和信念。

MyBatis用过吗?一二级缓存清楚吗?什么是最左匹配原则?

第一个匹配的leftmi的前缀说明:MySQL在构建连接索引时,会按照左优先级开始,即从连接索引最合适的字段开始。
例如,有一张student表,则根据大学班级的编号和类型创建joint_major_class索引(major,class)。
如果查询条件仅包含班级信息,则无法使用联接列表,但学院编号与联接列表相匹配。
使用指数设计策略:使用指数覆盖来避免营业收入表。
例如,查询某个学生的主键号时,直接通过主键索引获取数据,避免额外的查询。
每个指定索引都有独特的特征。
避免三个以上表的连接操作,确保它们具有关联的索引字段并优化SQL性能。
指定varchar字段时,根据文本区别本身设置索引长度,以平衡索引长度和区别。
但搜索页面应避免完全查询,并应由搜索引擎解析,使用与品牌索引匹配的前缀来优化查询效率。
SQL性能优化的目标是至少达到weapon级别,其次是ref级别,如果可能的话,达到consist级别,以提高查询的速度。
MyBatis缓存机制:MyBatis是在SQLSession级别进行一级缓存,目标是同一个SQLSession,在数据库访问中查找搜索结果并减少。
二级缓存是Mapper级别的缓存,必须手动开启,用于收集数据库对应的查询结果,减少频繁的数据库查询。
MySQL主从同步原理:主数据库记录Binarylog日志,从数据库开始连接主数据库的I/O线以获取更改的记录并将其保存在自己的Nullamlog文件中,在NullamlogupdatenoTaNullamlog中。
库表共享的策略和目标:库表共享是为了减少数据库压力和查询时间。
适用于一张表行数超过500万行或者一张表容量超过2GB的情况。
常见的数据库和数据库管理策略包括垂直拆分、水平拆分、使用中间体等。
首先,应根据必要且已知的特征来选择策略,例如基于userId的模块、固定比特分割、下载分割、漫游分割等。
、分户业务、大字段独立存储、不常用字段独立存储等。
不同处理字段中查询:如果使用了userId分库和表,但要根据电话号码查询,可以创建单独的电话号码索引表,根据userId收集电话号码和userId电话号码,然后通过userId查询数据,逻辑与返回表类似。