zoukankan      html  css  js  c++  java
  • 水平分表

    一、概念

    水平分表:是为了解决单表记录数据过大引起的效率问题,通过HASH、分段等手段拆分,将大表化小的手段。

    垂直分表:是将宽表变成几个窄表的手段,几个拆分前后的数据记录数未改变。通过将少量的重要字段剥离到窄表,让每个页容纳更多的行,减少跨页检索,减小磁盘扫描范围,达到提高效率的目的。

    1. 何时进行垂直拆分:

    1.单表数据总量可能过千万。
    2.字段超过20个
    3.包含超长varchar、text、clob、blob等较占空间的类型字段。

    1. 哪些字段适合放在小表:

    1.数据查询条件、排序用到的字段:商品id、商户id、分类编号、品牌编号、逻辑删除字段等。
    2.高频访问的小子段:商品名、子标题、厂家信息、价格。

    1. 哪些字段适合放在大表:

    1.低频访问字段:配送信息、售后申明、最后更新时间。
    2.大字段:图文详情、图片Base64、Json元数据(特殊情况下某个大字段就需要单独存到一个表)。

    二、innodb管理数据的机制:

    row -> page(16KB) -> extent(1MB) -> segment -> table_space;

    row:行,就是一条记录。
    page:页,磁盘存储,固定大小为16KB,根据行数据大不同大小,存储若干连续的行。
    extent:区,固定大小为1MB,也就是一个区只能保存64个连续的页。
    segment:段。
    table_space:表空间。

    innodb1.0后提供了压缩页的技术,可以让每页物理上存储更多的逻辑数据。跨页检索数据时的解压缩效率不算高,所以做表设计时,要尽量的在一个页中存储更多的行数据,来减少跨页检索的次数,来提高数据检索效率。

    垂直拆分前:每行占1KB,需要625万页来存储。
    垂直拆分后:每行占64B,只需要39万页来存储。
    查询时需要检索的数据页数相差16倍。

  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/15584147.html
Copyright © 2011-2022 走看看