MySQLInnoDB存储引擎之表(一)(一)

2015-01-25 19:47:12 · 作者: · 浏览: 13

主要介绍InnoDB存储引擎表的逻辑存储以及实现。重点介绍数据在表中是如何组织和存放的。

1.索引组织表(index organized table)

在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表叫索引组织表。在InnoDB存在引擎表中,每张表都有个主键(Primary key),如果在创建表时没有显示定义主键,则会按照如下方式选择或者创建主键:a.判定是否有非空的唯一索引(unique not null),如果有则该列即为主键。若果有多个,则选择建表是第一个定义的非空位于索引为主键。注意:主键的选择根据的是定义索引的顺序,而不是建表时的列的顺序。 b.如果不存在唯一索引,InnoDB存储引擎字段创建一个6字节大小的指针。

2.InnoDB逻辑存储结构
在InnoDB存储引擎中,所有的数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称之为块(block)。InnoDB存储引擎的逻辑存储结构如下图。
vc/M2Mri0tS689TavenJ3KGjts62vMrH0v3H5tfUye253MDttcShozxicj4KICAgIEMux/g8YnI+CiAgICAgICAgx/jKx9PJwazQ+NKz1+mzybXEv9W85KGjSW5ub0RCtOa0otL9x+bSs7XEtPPQoc6qMTZLQqOs0ru49sf409A2NLj2wazQ+LXE0rPX6bPJo6zL+dLUw7+49sf4tcS089ChtrzKxzFNQqGjSW5ub0RCIDEuMC54sOaxvr+qyrzS/cjr0bnL9dKzo6y8tMO/uPbSs7XEtPPQob/J0tTU2r2ose3Ksc2ouf2yzsr9a2V5X2Jsb2NrX3NpemXJ6NbDzqoyS6GiNEuhojhLo6zS8rTLw7+49sf4ttTT2tKztcTK/cG/vs3OqjUxMqGiMjU2oaIxMjaho0lubm9EQiAxLjIuWLDmsb7QwtT2ss7K/Wlubm9kYl9wYWdlX3NpemW9q8SsyM/Ss7XEtPPQocno1sPOqjRLoaI4S6OstavKx9Kz1tC1xMr9vt2yu8rH0bnL9aOs1eLKx8f41tC1xMr9wb/NrNH5zqoyNTahojEyOKGj0ru+5Luwo6yyu8Lbwta1xLTz0KHU9cO0seS7r6Osx/i1xLTz0KGyu7HkMU2ho7WrysfT0NXi0fnSu7j2zsrM4qO61Nq/qsb0tsDBorHtv9W85NauuvOjrLS0vai1xLHtxKzIz7Tz0KHKxzk2S6Osx/jW0MrHNjS49sGs0Pi1xNKzo6y0tL2otcSx7b/VvOTTprjDyscxTbLFttTRvaO/1eLKx9LyzqrU2sO/uPa2zrXEv6rKvMqxo6zPyNPDMzK49tKztPPQobXEy+nGrNKzKGZyYWdtZW50CiBwYWdlKcC0saO05sr9vt2jrNTayrnTw83q1eLQqdKz1q6687LFysc2NLj2wazQ+LXE0rO1xMnqx+uho9Xi0fnX9srHttTT2tK70KnQobHtu/LV33VuZG/V4sDgtcS2zqOsv8nS1NTav6rKvMqxyerH673Pydm1xL/VvOSjrL3ayqG0xcXMyN3Bv7XEv6rP+qGjPGJyPgogICAgRC7Sszxicj4KICAgICAgICDSs8rHSW5ub0RCtMXFzLncwO21xNfu0KG1pc67oaPErMjPtPPQoc6qMTZLo6y/ydLUzai5/Wlubm9kYl9wYWdlX3NpemW9q9KztcS089ChyejWw86qNEuhojhLoaIxNkujrNTyy/nT0LHt1tDSs7XEtPPQoba8zqrJ6NbDJiMyMDU0MDujrLK7v8nS1LbUxuTU2bTO0N64xKGjs/23x82ouf1teXNxbGR1bXC1vMjrus21vLP2stnX98C0svrJ+tDCtcS/4qGjs6O8+7XE0rO1xMDg0M3T0DrK/b7d0rMoQi10cmVlIE5vZGUpoaJ1bmRv0rModW5vZCBMb2cgUGFnZSmhos+1zbPSsyhTeXN0ZW0gUGFnZSmhosrCzvHK/b7d0rMoVHJhbnNhY3Rpb24gc3lzdGVtIFBhZ2UpoaKy5cjru7qz5b/Vz9DB0LHt0rMoSW5zZXJ0IEJ1ZmZlciBGcmVlIExpc3QpoaLOtNG5y/W1xLb+vfjWxrTzttTP89KzKFVuY29tcHJlc3NlZAogQkxPQiBQYWdlKaGi0bnL9bXEtv69+NbGttTP89KzKGNvbXByZXNzZWQgQkxPQiBQYWdlKTxicj4KICAgIEUu0NA8YnI+CiAgICAgICAgSW5ub0RCtOa0otL9x+bKx8Pmz/LQ0LXEKHJvdy1vcmllbnRlZCmjrNKyvs3Kx8u1yv2+3crHsLTQ0L340NC05rfFtcSho8O/uPbSs7Tmt8W1xNDQvMfCvNKyysfT0NOy0NS2qNLltcSjrNfutuDUy9DQtOa3xTE2Sy8yLTIwMNDQtcS8x8K8o6y8tDc5OTLQ0LzHwryhozwvcD4KCjxwPjMuSW5ub0RC0NC8x8K8JiMyNjY4NDvKvTxicj4KICAgIElubm9EQrTmtKLS/cfmtcS8x8K8ysfS1NDQtcTQzsq9tOa0orXEo6zV4r7Nse3D99Kz1tCxo7Tm18Wx7dbQ0rvQ0NDQtcTK/b7doaPG5MDg0M3T0FJFRFVOREFOVKGiIENPTVBBQ1ShokNPTVBSRVNToaJEWU5BTUlDy8TW1qGjv8nS1M2ouf1zaG93ICB0YWJsZSBzdGF0dXM7wLSy6b+0tbHHsL/i1tDDv9XFse21xMr9vt0mIzI2Njg0O8q9yOfPws28Ojxicj4KICAgPGltZyBzcmM9"https://www.cppentry.com/upload_files/article/57/1_w24l2__.jpg" alt="\">
A.COMPACT
在MySQL 5.0中引入,其设计目标是高兴的存储数据。也就是一个页中存放的行数据越多,其性能越高。compact行记录的存放方式:

\
有图可知,compact行记录格式的首部是一个非NULL变长字段长度列表,并且其是按照列的顺序逆序放置的,其长度为:
若列的长度小于255个字节,用1字节表示;
若大于255个字节,用2字节表示。
变长字段之后的第二个部分是NUL