MySQL面试题总结

50 阅读2分钟

覆盖索引是什么意思?

覆盖索引是mysql一种性能优化技术,一般正常的索引查询流程是通过索引查询出目标行的主键,再通过主键去锁定目标行,这个过程查询表查了两次,称为回表,而覆盖索引的意思就是如果索引包含需要查询的列时则不需要回表。提升了查询效率。

联合索引最左匹配原则

设计联合索引时需要注意是否满足最左原则匹配,就是联合索引会按照最左边开始匹配,比如建立了一个索引包括,年龄,班级,姓名,我where 班级就不会走索引,如果where 年龄,或者年龄+班级也会走索引,使用最频繁的最好放在最左侧,实际开发中需要注意的是,创建多列唯一索引需要注意最左列的索引是否冗余。

如何进行SQL调优

开发过程中,需要注意SQL规范,比如查多少,用多少,满足最左匹配原则,尽量减少和数据库的交互,比如我要update,可以直接update,where而不是先selecet然后再update,减少网络延迟。

当遇到查询速度慢时,会先从影响最小的地方开始审查,是不是有多余的查询,是不是select* , 是不是连了多余的表,如果都没问题,进行下一段的排查,找到耗时sql,explain一下遍历的行数,预想中走索引的是否走了索引,如果没走索引,尽量走索引,如果没有索引可以走评估是否创建索引,如果创建了索引,查询数量实在是多,可以考虑在java中使用多线程来进行查询,通过countDownLatch来实现多线程的同步问题。

什么会导致索引失效?

1.使用联合索引时未遵循最左原则匹配 2.使用select * 导致未执行覆盖索引 3.in或not in元素太多。 4.使用like时模糊左边。 5.order by

mysql事务的四大特性和三大问题

mysql四大隔离级别