Mysql
-
- 1. MySQL的索引原理是什么?什么是索引?以及索引的优缺点?
- 2. 解释一下B+树和B树的区别及各自定义?
- 3. MyISAM索引和Innodb索引的区别?
- 4. 什么是聚簇索引?辅助索引?
- 5.非聚簇索引一定会回表查询么?
- 6. 什么是回表操作?
- 7. 什么是索引覆盖?
- 8.什么是短索引?
- 9.索引的数据结构有哪几种?
- 10. MySQL的索引的创建原则?MySQL不适合建立索引的情况?
- 11. 使用索引一定能提高查询性能么?
- 12. MySQL的主键索引?联合索引?唯一索引?
- 13. MySQL的索引下推是啥意思?
- 14. MySQL索引的最左前缀原则是什么?
- 15. MySQL的索引的rows很大会引起什么问题?
- 16. MySQL的解决慢查询的方法?explain方法怎么用的?
- 17. MySQL的Sql优化方法有什么?
- 18. MySQL的left join、right join、inner join、join的区别?
- 19. MySQL的小表驱动大表是什么意思?
- 20. binlog和redo log的具体解释?
- 22. binlog和redo log区别?
- 23. MySQL的exists和in的区别是什么?
- 24.drop、delete、truncate的区别?
- 25.UNION 和UNION All的区别?
- 26. MySQL的数据库的连接池都有什么?你用过什么?
- 27. 数据库的三大范式是什么?
- 28. 使用自增主键和UUID的区别?
- 29. 字段为什么要求定义为not null?
- 30. 什么是数据库事务?以及事务的四大特性?
- 31. MySQL的脏读?幻读?不可重复读?
- 32. MySQL的隔离机制?
- 33. 隔离级别和锁的关系?
- 34. MySQL的锁都有什么?表、页、行级锁?共享锁?排它锁?
- 35. MySQL中Innodb和MyISAM中使用什么锁?
- 36. MySQL中Innodb行级锁怎么实现的?
- 37. MySQL的死锁及其解决的方法?
- 38.乐观锁和悲观锁定义及实现?
- 39.超键?外键?候选键?主键?
- 40. SQL的生命周期的步骤?
- 41. 大表数据查询,怎么优化?
- 42. 关心过业务系统里sql的耗时么?统计过慢查询么?对慢查询都怎么优化?
- 43. 大批量删除数据的方法?
- 44. 大表优化,数据量大,CRUD慢,该如何优化?
- 45. MySQL的分库分表你们是怎么做的?用了什么中间件?
- 46. MySQL的主从复制的工作原理?
- 47. MySQL的读写分离是什么?以及解决方案?
- 48.MySQL有一个连接断了,我怎样保证获取不到这个连接?
- 49. MySQL的搜索引擎之间的区别与特点?怎么选择合适的引擎?
- 50. MySQL的更新语句的执行流程?
- 51. 什么情况会导致锁表?
- 52. 为什么插入MySQL会变慢?
持续更新中~
1. MySQL的索引原理是什么?什么是索引?以及索引的优缺点?
索引是一种数据结构,使用索引可以快速访问数据库表中的特定信息。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引是一个文件,是要占用物理空间的
优点:
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
- 可以大大加快数据的检索速度,提高查询性能。
- 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
- 在使用分组和排序子句进行数据检索时,索引可以显著减少查询中分组和排序的时间。
- 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。
缺点:
- 创建索引和维护索引需要耗费时间,这种时间随着数据量的增加而增加。
- 索引需要占用物理空间,除了数据表占用的数据空间之外,每一个索引还需要占用一定的物理空间。
- 当对表中的数据进行增加、删除和修改时,索引也需要动态维护,这可能会降低数据的维护速度。
索引的基本原理:
- 当执行一个查询时,MySQL首先会检查查询条件是否可以利用索引。如果可以,它会根据查询条件中的值在索引中进行查找。
- MySQL从索引的根节点开始,根据键值比较,沿着树结构向下遍历,直到找到匹配的叶子节点。这个过程称为索引查找。
- 一旦在叶子节点中找到匹配的键值,MySQL就可以获取与该键值相关联的指针或地址,然后直接定位到表中的实际数据记录。
- 通过这种方式,MySQL避免了全表扫描,只访问了必要的索引节点和数据记录,从而大大提高了查询性能。
2. 解释一下B+树和B树的区别及各自定义?
叶子节点:没有子节点的节点;
非叶子节点:度不为0的节点,又称分支节点;
根节点:顶端的节点称为根节点;
一个节点下面最多两个节点;
度:结点拥有的子树数;
平衡二叉树(AVL树):满足二叉树特性基础,每个节点树高度差不超过1;
二叉查找树:左子节点小于当前节点的键值,右子节点大于当前节点的键值
为什么选择B+树实现索引:
B+树的内部节点只存放键,不存值,因此,一次读取,可以在内存中获取更多的键。一般来说索引本身也很大,不可能全部存储内存中,因此索引往往以索引文件形式存到磁盘上,索引查找就要产生I/O消耗,所以选择一个数据结构的优劣就是I/O查找复杂度,B+树叶子节点存有全部数据,叶子节点用链表链接连接,也是顺序存储的,读值得时候会提前读进内存,减少I/O次数,查询排序都快,磁盘分block块存储的,一次读取若干block块,B+树不存数据,所以,B+树单次IO信息量大于B树,B+树IO次数就少于B树,所以用B+树;
B树:
- B树适合随机检索;
- B树不稳定,最好是根节点就查到了,最坏查到叶子节点;
- B树的每个节点都带有数据;
B+树:
- B+树所有的叶子节点包含了全部的数据;
- B+树所有非叶子节点可以看成是索引节点,没有数据,只存键;
- B+树每个叶子节点都带有指向下一个叶子节点的指针,形成有序链表;
- B+树必须查询到叶子节点;
3. MyISAM索引和Innodb索引的区别?
- Innodb是聚簇索引,MyISAM是非聚簇索引;
- Innodb的主键索引的叶子节点存储着行数据,因此主键索引非常高效;
- MyISAM索引的叶子节点存储的事行数据地址,需要再一次寻址才能得到数据;
- Innodb非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。
4. 什么是聚簇索引?辅助索引?
聚簇索引:将数据存储和索引放到了一块,找到了索引就找到了数据(在一棵树上);
非聚簇索引:索引结构的叶子节点指向了数据的对应位置上(不在一棵树上)。
辅助索引:(也称为非主键索引或二级索引)
- 辅助索引通常只存在于非聚集索引上,在InnoDB存储引擎中,辅助索引的叶子节点包含的不是数据行的完整信息,而是对应数据行的主键值。这是因为InnoDB的数据是按照主键的顺序存储的,也就是说,主键索引(也称为聚簇索引)决定了数据的物理存储顺序。
- 当执行一个查询时,如果使用辅助索引来查找数据,InnoDB首先会查找辅助索引来找到相应的主键值,然后使用这个主键值去查找聚簇索引(即主键索引