1.能说说什么是索引吗?索引的种类有哪些?
索引(Index)是帮助数据库高效获取数据的数据结构。索引是在基于数据库表创建的,它包含一个表中某些列的值以及记录对应的地址,并且把这些值存储在一个数据结构中。最常见的就是使用哈希表、B+树作为索引,项目中我们使用InnoDB引擎,默认的是B+树。
2.什么情况下适合建索引?
一般来说,在WHERE和JOIN中出现的列需要建立索引,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引(以通配符%和 开头作查询时,MySQL不会使用索引)。通常会根据慢查询日志来优化 SQL以及判断是否建索引。
3.mysql为什么采用b+树的数据结构?这和hash索引比起来有什么优缺点吗?
由于索引是存在于磁盘中,当索引非常大的时候,比如达到几个G的时候,无法一次加载到内存中,所以数据库中索引使用的是查找效率更高的树形结构。B+树是平衡多路查找树,是为磁盘等外存储设备设计的一种平衡查找树。
4.如果每天几百万数据,一个月就是几千万了,有没有对查询做一些优化呢?
- 分库分表
- 大宽表和模糊查询可以用es
5.建索引需要遵循哪些原则?
- 最左匹配原则
- =和in可以乱序
- 区分度高的列建索引
- 索引列不参与计算
- 尽量扩展索引,不新建索引