admin管理员组文章数量:1122996
DataBase
存储差异
行式存储:以行为单位进行存储,存储在连续的物理内存上
列式存储:以列为单位进行存储,存储在连续的物理内存上
读取差异
animal表:
name | age | color |
---|---|---|
Tom | one | blue |
Jerry | two | brown |
Spike | three | gray |
Tom | four | white |
查询语句:
select age from animal where name = 'Tom' and color = 'white'
行式存储的查询步骤:
1.根据索引查询出符合 name = 'Tom' and color = 'white' 的行的物理地址
2.从物理地址中取出该行的所有数据
3.从该行的所有数据中取出age列的数据
优势:
1.对于插入/更新而言高效
2.对于查询整行数据而言高效
上述优势源于:行内数据的物理地址是连续的
劣势:
查询时整行的数据都会被读取
列式存储的查询步骤:
了解查询步骤之前,需要先了解数据压缩(通常通过字典表,此处假定字典表的构建算法为自增)
对数据去重后,可得字典:
数据表可转换为:
name | age | color |
---|---|---|
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
1 | 4 | 4 |
数据压缩的作用:通过构建算法,可对数据进行压缩,节省存储空间
查询步骤:
1.对于 where name = 'Tom' and color = 'white':
先查询name字典,得知Tom对应的字典ID为1,将1与name列进行匹配,匹配完成后创建bitmap;创建规则:匹配成功处值为1,否则为0:
1 |
0 |
0 |
1 |
同理可得white与color列匹配后创建的bitmap:
0 |
0 |
0 |
1 |
2.将上述bitmap进行与运算可得:
0 |
0 |
0 |
1 |
3.返回bitmap中值为1的行,本例中要求返回age列的数据,故返回age列的第四行的数据
优势:
1.通过数据压缩可节省存储空间
2.任何列都可成为索引
3.查询时只有相关的列的数据会被读取
劣势:
1.查询时需要对查询到的列的数据进行组装
2.对于插入/更新而言较困难,因为列之间的物理地址不是连续的
本文标签: DataBase
版权声明:本文标题:DataBase 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1686559872a10305.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论