暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

面试总结—Mysql02—索引、数据库引擎、乐观锁

乐吧了吧 2021-06-21
330

1、mysql索引类型

mysql索引类型我感觉有两种回答:

        1. 普通索引、唯一索引、全文搜索索引。

    2.聚簇索引和非聚簇索引。参考:https://www.cnblogs.com/crazylqy/p/7615457.html


2、mysql索引如何实现的,为什么关联索引支持左优先原则,业务中如何选择更好的sql查询方式。

    - mysql索引采用B+树去实现,当创建关联索引时,mysql会对每一个字段创建一个B+树,sql查询时mysql会对优化后的sql语句(mysql会优化where条件的顺序)进行字段和B+树的匹配,遇到关联索引时会按照创建索引的顺序去匹配,如果匹配不到就不再查找,所以说关联索引查询时会存在左优先原则。例如:关联索引(A,B,C),若匹配不到A,就不会再去匹配BC字段,后续同理。

    - 业务中碰到涉及索引较多的sql语句,可以使用mysql的EXPLAIN关键字分析查询中所使用的索引及其查询效率,然后根据结果去调整sql语句。


3、mysql数据库引擎及其区别

mysql的数据引擎我主要了解过两种:Innodb和MyISAM。在mysql5.5之后默认使用Innodb数据引擎。

- 两者的主要区别是
  - Innodb主要使用B+树实现索引,查询效率更高效。MyISAM好像是使用B树(这个忘了,可以查一下)。
  - Innodb支持事物,MyISAM不支持事物
  - Innodb锁的范围更小,支持行锁,而MyISAM只支持表锁。
  - Innodb不支持全文索引,MyISAM支持
  - MyISAM会记录行数,所以count(1)效率更加高。

- 适用范围
  - 如果业务中频繁更新数据,不能使用MyISAM引擎,因为update会进行锁表,且锁持续期间,是不能读的。
  - 如果有事务需求,肯定选择Innodb。
  - 如果只有查询需求,建议选择MyISAM引擎。


4、乐观锁和悲观锁

- 乐观锁
  乐观锁保持乐观的心态,在更新时不进行锁操作,而是通过数据本身来保证数据正确性,只有在数据提交时才会进行数据的版本判断。所以使用乐观锁都会存在一个版本号。并发时会存在同时多条线程更新一条数据时,只有一条更新成功的情况。
- 悲观锁
  悲观锁依靠数据库的锁机制,操作数据前先锁数据,拿到锁之后会阻止其他线程进行修改此数据,在更新数据时,读效率更低效。


5、用过哪些分库分表框架
数据库分库分表使用阿里云的drds和rds进行分库分表,知道存在一些分表分库框架mycat,但是没有用过。




面试总结题目——Redis部分

面试总结—Mysql-01





文章转载自乐吧了吧,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论