决战圣地玛丽乔亚Day19---
聚簇索引和非聚簇索引:
聚簇和非聚簇的含义是:是否索引和数据进行绑定,即是否需要二次查找才能找到对应的数据值。
由于聚簇索引的绑定关系,要求聚簇索引是唯一值,否则不能明确通过索引确定数据。一般来说主键索引做聚簇索引,非主键索引是非聚簇索引(辅助索引),如果不是主键会选一个非空唯一字段。
由图可以看出,InnoDB使用聚簇索引,聚簇索引和非聚簇索引分开。 聚簇索引通过叶子结点即可拿到数据,非聚簇索引需要根据非聚簇索引建立的B+数寻找到叶子结点,然后根据叶子结点存的主键值去聚簇索引找到对应数据
MyIsam使用非聚簇索引,通过不同索引建立不同的B+树,叶子结点都指向真正的数据
聚簇索引的优势:
主键和数据存一起,如果按主键索引,聚簇索引更快。
差同一数据页数据,会有缓存。
辅助索引叶子结点指向主键的好处是如果主键进行改动辅助节点不需要变动
聚簇索引的劣势:
- 维护索引很昂贵,特别是插入新行或者主键被更新导至要分页(page split)的时候。建议在大量插入新行后,选在负载较低的时间段,通过OPTIMIZE TABLE优化表,因为必须被移动的行数据可能造成碎片。使用独享表空间可以弱化碎片
- 主键如果是随机ID,会导致存储稀疏。建议使用自增,自增可以顺序填满不浪费。 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。
- 主键如果过长,辅助索引也会占用过多空间
- 更新主键的代价很高,因为将会导致被更新的行移动
full-text全文索引:
只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引
5.6之后InnoDB也支持全文索引了。
如果采用先填充表,然后再添加索引的方式,而不是采用将数据加载到已经索引过的表中的方式,那么表的加载过程会变得更快一些
FULLTEXT的精度有待研究。
InnoDB和MyISAM区别?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!