mysql提供了4中分区方案range,list,hash,key。本次只记录操作的过程,在理论方面暂时没有做记录。会在结束的展示完成之后再做详细的分析。
1.创建数据库
2.创建数据表
创建数据表xks_driver,指定id为自增,分区为按照id进行hash分区,分区个数为5
3.查看表的样式
frm:表示表的文件结构
par:表示分区结构
xks_driver做了5个分区,分别是p0p1p2p3p4,分别将会按照hash存储数据到这几个分区中。
MYD:表示数据存储
MYI:表示索引存储
4.创建索引
5.插入千万条数据
插入数据可以直接使用命令行,如先往数据表中插入几十条数据,然后使用
insert into xks_driver (name,password) select name,password from xks_driver
让数据以2倍的速度不断递增,若干次后增长的速度就会非常快。
当数据量达到2621440的时候,查看文件占用的空间。
继续增加数,直到达到千万级别。在插入的过程中,也可以使用watch命令每隔一个时间执行一次查询显示
watch -n1 ls -lh
本计划往数据表中插入1千万条左右的数据,一不小心插入了20971520条数据。
此时的数据空间占用如下:
三个字段的表占用了892M的磁盘空间,其中索引基本占用了一半的空间(这里显示索引所占用的空间比数据所占用的空间小,但是实际情况下索引所占用的空间很有可能比数据所占用的空间还要大,甚至大很多)。
6.数据查询
看到执行的结果,相信大家已经惊呆了吧。在查询一个2千多万行数据的表时,只用了0-0.11秒的时间。
7.分区对比
| 分区类型 | 优点 | 缺点 | 共性 |
|---|---|---|---|
| range | 适合于日期类型,支持复合分区 | 有限的分区 | 一般只针对某一列 |
| list | 适合于有规定取值的列,支持复合分区 | 有限的分区,插入记录的这一列的值不在list中,则数据会丢失 | 一般只针对某一列 |
| hash | 线性hash使增加,删除和合并分区更加快捷 | 线性hash的数据分布不均匀,而一般hash的数据分布较均匀 | 一般只针对某一列 |
| key | 列可以为字符型等其他非int类型 | 效率较之前的几种较低,因为函数为复杂的函数 | 一般只针对某一列 |
未完待续……