MySQL常见面试题索引与表设计
1 索引概念、索引模型 Q: 你们每天这么大的数据量,都是保存在关系型数据库中吗? A: 是的,我 们线上使用的是MySQL数据库 Q: 每天几百万数据,一个月就是几千万了,那你们有没有对于查询做一些优化呢? A: 我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话) Q: 那你能说说什么是索引吗? A: 索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据 Q: 那么索引具体采用的哪种数据结构呢? A: 常见的MySQL主要有两种结构: Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树 Q: 既然你提到InnoDB使用的B+ 树的索引模型,那么你知道为什么采用B+ 树吗?这和Hash索引比较起来有什么优缺点吗? A: 因为Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。 所以,哈希索引只适用于等值查询的场景。 而B+ 树是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描 Q: 除了上面这个范围查询的,你还能说出其他的一些区别吗? A: B+ Tree索引和Hash索引区别? 哈希索引适合等值查询,但是无法进行范围查询