1.mysql为什么不使用hash索引?
答:
- hash索引需要好的hash函数,如果hash函数不好,会导致hash碰撞,导致数据散列不均匀会让查询效率从O(1)变为O(n)
- 当需要进行范围查找的时候需要按个遍历,效率比较低。
2.在mysql里面有没有hash索引
答:有
3.B树与B+树的区别?
答: B+Tree是在BTree的基础之上做的一种优化,变化如下
- B+tree每个节点可以包含更多的节点,这个做的原因有两个,第一个原因是为了降低树的高度,第二个原因是将数据范围变为多个缺件,区间越多,数据检索越快
- 非叶子结点存储可以,叶子节点存储key和数据。
- 叶子节点两两指针相互连接(符合磁盘的预读特性),顺序查询性能更高。
4.聚簇索引与非聚簇索引
答:数据跟索引存储在一起的叫做聚簇索引,没有存储在一起的叫做非聚簇索引。
- innodb存储引擎在进行数据插入的时候,数据必须要跟某一个索引列存储在一起,这个索引列可以是主键,如果没有主键,选择唯一键,如果没有唯一键,选择6字节的rowid来进行存储。数据必定是跟某一个索引绑定在一起的,绑定数据的索引叫做聚簇索引。其他索引的叶子节点存储的数据不再是整行的记录,而是聚簇索引的id值。
- innodb中既有聚簇索引也有非聚簇索引,MyISAM中只有非聚簇索引。
5. 如何回答面试中问到的优化问题?
答:
- 加索引
- 看执行计划
- 优化SQL语句
- 分库分表
- 表结构设计