mysql(5)-分区实践
2017-11-09 23:08
148 查看
mysql提供了4中分区方案range,list,hash,key。本次只记录操作的过程,在理论方面暂时没有做记录。会在结束的展示完成之后再做详细的分析。
par:表示分区结构
xks_driver做了5个分区,分别是p0p1p2p3p4,分别将会按照hash存储数据到这几个分区中。
MYD:表示数据存储
MYI:表示索引存储
insert into xks_driver (name,password) select name,password from xks_driver
让数据以2倍的速度不断递增,若干次后增长的速度就会非常快。
当数据量达到2621440的时候,查看文件占用的空间。
继续增加数,直到达到千万级别。在插入的过程中,也可以使用watch命令每隔一个时间执行一次查询显示
watch -n1 ls -lh
本计划往数据表中插入1千万条左右的数据,一不小心插入了20971520条数据。
此时的数据空间占用如下:
三个字段的表占用了892M的磁盘空间,其中索引基本占用了一半的空间(这里显示索引所占用的空间比数据所占用的空间小,但是实际情况下索引所占用的空间很有可能比数据所占用的空间还要大,甚至大很多)。
看到执行的结果,相信大家已经惊呆了吧。在查询一个2千多万行数据的表时,只用了0-0.11秒的时间。
未完待续……
1.创建数据库
2.创建数据表
创建数据表xks_driver,指定id为自增,分区为按照id进行hash分区,分区个数为53.查看表的样式
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类型 | 效率较之前的几种较低,因为函数为复杂的函数 | 一般只针对某一列 |
相关文章推荐
- 对MySQL交换分区的实践
- 对已有数据的mysql表进行分区的最佳实践
- 对MySQL交换分区的实践
- mysql 分区分表实践
- mysql 分表分区实践
- mysql 自动分区实践
- Mysql 5.5.36 表分区方法步骤SQL实例 range、 list、 hash、 key 分区实践 常见错误解决
- MySQL性能优化的21个最佳实践
- 使用LVS+keepalived实现mysql负载均衡的实践和总结
- mysql 5.1新功能 -- 按日期分区
- Mysql 分区介绍(一) ——概述
- MySQL中表分区技术详细解析
- 使用存储过程和Event事件为Mysql表自动建立分区
- mysql悲观锁以及乐观锁总结和实践
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- [MySQL优化案例]系列 -- 在5.1的分区功能中混用InnoDB和MyISAM
- MySQL 的 20+ 条最佳实践
- mysql乐观锁总结和实践
- MySQL 5.5主从复制实践
- mysql分表和表分区详解