1.为什么要使用索引
- 唯一索引可以保证数据库每一行数据的唯一性
- 大大加快查询的速度
- 加快表的连接?
- 将随机io变为顺序io?
2.为什么不对表中的每一列创建索引
- 索引需要占用物理空间
- 对表中的数据进行修改时,索引也需要动态维护。
3.索引如何提高查询的速度
- 将无序的结构变为有序的数据(平衡二叉树)
4.索引的注意事项
- 在经常需要查询的列上面创建索引,可以加快查询速度
- 在where子句中的列创建索引,加快判断的速度
- 在经常需要排序的列上面创建索引,因为索已经排序
- 避免在where字句中对字段施加函数,导致无法命中索引
- 避免使用业务主键,而是使用逻辑主键
- 索引项需要时NOT NULL,否则对导致全表扫描
- 删除长期未使用的索引
5.单条查询使用哈希表结构索引,而绝大多数情况下建议使用B+索引
6.MyISAM与InnoDB实现BTree索引方式的区别
- 在MyISAM中的B+树的叶子节点,无论是主键索引还是辅助索引,叶子节点的Data域存放的都是数据记录的地址,然后通过该地址去相应的表中读取数据。索引其主键索引和辅助索引均是非聚簇索引
- InnoDB中,主键索引的叶子节点存放的是数据库中每一行的数据,而辅助索引的叶子节点存放的是主键索引的值,再通过主键索引的B+树找到每一行的数据。这其中,主键索引又称为聚簇索引,而辅助索引称为非聚簇索引。
一图胜千言