为什么要使用数据库索引?
(1)在查询的时候,数据库索引可以大大提升读取速度。
(2)使用唯一索引的话可以保证表中每一行的独立性。
(3)可以加快表和表之间的相互连接。
(4)在进行分组和排序的时候,提高速度
缺点:索引也占用物理空间,当进行删除和修改的时候,也要进行数据库的维护。
索引的分类
唯一索引,非唯一索引,聚集索引,非聚集索引,全文索引,主键索引,组合索引。
聚集索引:表中记录的物理顺序与键值的索引顺序。InnoDB为聚集索引。在进行查找的时候非常高效,但是在进行删除和插入的时候,因为要维护B+树,索引不建议使用。
非聚集索引:表中记录的物理顺序与键值的索引顺序不一致。MyISAM为非聚集索引。在进行插入和删除的时候性能较好。
唯一索引:可以保证数据行的唯一性。
数据库的原理
数据库索引结构为B+树。不同的存储引擎对索引的实现方式是不同的
InnoDB是聚集索引。其叶子节点有自己的全部信息。其索引和数据在一起,没有分开。而MyISAM实现的是非聚集索引,其叶子节点保存了指向数据的指针,其索引和数据是分开的。
其InnoDB和myISAM的区别:
(1)InnoDB支持事务,其默认隔离级别是重复读。其myISAM不支持事务操作,但是其性能比较好,速度比较快。
(2)InnoDB允许有外键,MyISAM不允许有外键。
(3)InnoDB必须有主键,如果没有设置主键的话,InnoDB会自动生成自增主键。MyISAM允许没有主键。
(4)InnoDB是聚集索引,MyISAM是非聚集索引。
(5)InnoDB默认使用的是行级锁,但是也可以是表级锁。MyISAM的锁为表级锁,在插入和删除的时候比较不方便。
(6)在进行行数统计的时候,因为InnoDB没有保存总行数,所以要一个一个进行扫描。但是MyISAM拥有计数器,保存了总行数。
什么情况下索引会失效:
(1)当时字符串类型,不加引号时
(2)在索引列上进行计算和调用函数
(3)但or语句两边没有同时使用索引时。
(4)用like进行左模糊的时候,要进行全表扫描。
(5)当组合索引没有使用第一部分的索引时。