AI
推荐
模板社区
专题
登录
免费注册
首页
思维导图
详情
数据库索引
2016-06-05 12:05:10
30
举报
分享方式
免费使用
AI智能生成
mysql数据库索引的理论知识
数据库
模板推荐
作者其他创作
大纲/内容
索引分类
聚集索引
有主键:主键为聚集索引
无主键:第一个不允许NULL的唯一索引
无主,无非NULL唯一索引:使用innodb内置rowid
非聚集索引(二级索引,辅助索引)
ICP
ICP的使用条件
只能用于二级索引
只能用于单表的索引作为filter条件下推,不适用多表连接的连接条件下推
索引操作类型是EQ_REF/REF_OR_NULL/REF/SYSTEM/CONST才可以使用ICP
只能是Range操作,ALL/FT/INDEX_MERGE/INDEX_SCAN 不行
mysql特殊索引:前缀索引
1.索引的列有varchar字段 2.只索引了其开头部分长度的值
优点:节省索引空间。缺点:不支持ORDER BY 和GROUP BY
索引结构
B+树结构
聚集索引的叶子节点存放数据
非聚集索引存放的:非聚集索引的key+主键值
问:那么,根据二级索引查询的时候,是先查到叶子节点,然后再根据主键值查一次么?
强烈建议表都要有主键且以数字型为主键
B+树的高度是索引高度
聚集索引高度
决定根据主键取数据的理论io次数
非聚集索引高度
非聚集索引读取数据的理论io次数:本身+加上根据聚集索引的io次数
实际上由于缓存,可能不需那么多io
总结
索引的高度控制在3以内(含3)最合适,所以单表的记录数不要特别大
索引列的总长度越长,索引的高度可能越大。SQL的性能就越差
索引使用成本
空间成本
索引占空间,尤其大表不能忽略
时间成本
用不好反而浪费时间
区分两个概念
扫描行数
返回行数
更新成本
若增删改的内容和索引相关,在更新记录的同时还需要更新记录相关的二级索引,这可能会增加很多额外的IO
问题
问:那么,根据二级索引查询的时候,是先查到叶子节点,然后再根据主键值查一次么?
mysql的一个block是做什么的?
收藏
立即使用
索引使用场景
收藏
立即使用
数据库索引
穿越地平线
职业:软件工程师
去主页
Collect
Get Started
数据库设计
Collect
Get Started
索引
Collect
Get Started
数据库&索引
Collect
Get Started
数据库模型
评论
0
条评论
下一页
图形选择
思维导图
主题
补充说明
AI生成
修改AI描述
去编辑
重新生成
提示
关闭后当前内容将不会保存,是否继续?
取消
确定
Document