ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> # 索引类型与方式、聚簇与非聚簇索引 - 索引的概念如同一本字典里的拼音目录, 我们可以通过拼音目录快速锁定汉字的范围, 同样的Mysql索引也是为了提高数据的查找效率。对于非常小的表, 全表查询即可。中型到大型的表适合用索引, 对于特大型的表就需要用到分区技术(千万级数据)。对于TB级别的表数据, 可以使用分库分表 - 索引类型: 主键索引, 普通索引(单列索引和组合索引),唯一索引, 全文索引, 空间索引 - 索引方式: B+数索引, 哈希索引, 有序数组。 - B+数索引: 每个叶节点到根节点距离相等,适合用来查找范围内的数据,而且支持数据排序. 在行比较稀疏或者页分裂导致数据存储不连续时会导致全表扫描变慢 - B树的根节点所以和数据, B+数的根节点保存索引, 叶子节点保存数据 - InnoDB存储引擎会监控对二级索引的查找,会根据访问的频率和模式,为热点页建立哈希索引,来提高查询效率 - 哈希索引: 精确查询不能使用范围查询(范围查询要扫码全表), 不支持排序, 由于Hash索引比较的是进行Hash运算之后的Hash值,所以它只能用于等值的过滤, 包括 = , IN(), <=> (严格比较两个NULL值是否相等),Hash索引的查询效率要远高于B-Tree索引 - 有序数组: 等值查询和范围查询性能优秀, 插入数据成本高, 需要挪动数据, 适合静态表存储 - 数据存储方式: 聚簇索引,非聚簇索引 - 聚簇索引: 将数据存储与索引放到了一块,找到索引也就找到了数据 - Innodb使用的是聚簇索引(主键以外的索引都是二级索引) - 主键索引(聚簇索引)是按照每张表的主键来构造一颗B+树(如果没有主键的话, 会找唯一字段代替, 如果也没有的话会隐式创建一个),根节点是主键的值, 叶子节点是表数据 - 在主键索引上创建的索引称为二级索引(辅助索引、非聚簇索引), 也是一个B+数, 只不过叶子节点存放的是主键的值 - 非聚簇索引: 索引文件和数据文件是分离的,索引文件仅保存数据记录的磁盘地址 - 主键索引和二级索引都是B+树, 根节点存放的是索引的值, 叶子节点存放数据的地址 - [聚簇索引和非聚簇索引(通俗易懂 言简意赅)](https://www.cnblogs.com/jiawen010/p/11805241.html)