面试题
1.什么是索引?
索引是存储表中数据列中数值的一种数据结构。
2.索引有哪些类型?
b-tree索引:基于B+tree的一种数据结构
hash索引:基于hash表的一种数据结构
3.hash表是怎样进行工作的?
把数据表中的某一列通过hash函数计算出hash值,hash对应的是要存储的数据,但需要查找某一个数的时候,只需要通过hash函数计算出对应的hash值,就能够快速找到。
4.索引是怎么样提升性能的?
通过特定的数据结构,如B+tree和hash表进行数据的查找,比进行全表扫描的速度要快。
5. 数据库索引里面存的到底是什么?
存的是表中某一列的数据。
6.使用索引会有什么代价?
(1)索引会占用空间,表数据越多,索引占的空间也就越大
(2)表在进行更新操作的时候,也会引起索引的维护
7.建立索引的原则?
数据量较大,更新比较少,查询比较多
8.索引的最左匹配原则?
where子句使用最频繁的一列放在最左边
9.索引为什么使用B+Tree而不是用B-Tree?
B+Tree中数据只存储在叶子节点中,而B-Tree中每一个节点都有数据,所以来说B+Tree中可以存储更多的关键字(表中的数据列),因此树的层级越少,查询越快。
10.联合索引的优势?
(1)联合索引相当于多个单列索引,多个索引当然比单个索引开销大。
(2)覆盖索引,避免了在表中逐行扫面,减少了IO操作
(3)效率高,索引列越多,通过索引筛选出来的数据越少
11.什么情况下走索引?
(1)
where name like “%123” 不走索引
where name like "123%"走索引
(2)
假设联合索引(a,b,c),如果查询条件中没有包含A(select name from user where b='2' and c='3'),则不会走索引,如果select name from user where a='2' and c='3',则a走索引。