为什么加了索引能够提高效率:
索引底层实现是B+树。B+树类似折半查找,比如说如果有10亿条数据,一次就能砍到一半,数据量越多,索引的作用越大
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件
InnoDB本身就是按B+Tree组织的一个索引结构文件
聚簇索引 / 非聚簇索引
InnoDB的 主键索引是 聚簇索引-叶子节点包含了完整的数据记录, 索引和文件放在一起存储
myISAM的主键索引是 非聚簇索引-文件和数据文件是分离的(非聚集),索引和数据是2个文件
聚簇索引查询快:找到索引可以直接拿到数据,已经一次性加到内存中了
非聚簇索引查询:在索引文件中找到地址,再去到另外一个数据表中查询(回表)拿到文件,2次磁盘IO
主键索引: 是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字PRIMARY KEY 来创建
为什么建议InnoDB表必须要建一个主键,并且推荐使用整型的自增主键?
因为InnoDB存储引擎是基于B+Tree,如果不建主键 他会从所有字段中找到一个不重复的列作为隐藏主键来构造B+Tree,如果没有找到不重复的列,那么会维护一个隐藏的自增主键,所以建议建主键
1、整型的查询速度快
2、 整型占用的资源少
HASH:
对索引的key进行一次hash计算就可以定位出数据存储的位置
很多时候Hash索引要比B+树索引高效
仅能满足 “=”,“IN”,不支持范围查询
hash冲突问题