1、mysql索引类型
mysql索引类型我感觉有两种回答:
1. 普通索引、唯一索引、全文搜索索引。
2.聚簇索引和非聚簇索引。参考:
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,但是没有用过。