社区
MySQL
帖子详情
mysql 对超大表的处理
象宇
2010-12-17 08:44:53
我假设个问题,就是我的一个数据库表,已经很多个G了,而其这个表所在的磁盘空间已经所剩无几了,我想把这个表分到其他的磁盘上存储。具体如何做啊?
手册上没有很明确的例子。
帮忙解决一下吧。
谢谢。
...全文
483
27
打赏
收藏
mysql 对超大表的处理
我假设个问题,就是我的一个数据库表,已经很多个G了,而其这个表所在的磁盘空间已经所剩无几了,我想把这个表分到其他的磁盘上存储。具体如何做啊? 手册上没有很明确的例子。 帮忙解决一下吧。 谢谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
象宇
2010-12-21
打赏
举报
回复
ACMAIN_CHM
的答案是正解,只不过,我还没有验证。
实际的情况还不知道会怎样。
gatx177
2010-12-17
打赏
举报
回复
删除冗余数据~~~~~~~~~~~~~~~
ACMAIN_CHM
2010-12-17
打赏
举报
回复
没有办法,目前的MYSQL版本在WINDOWS都不支持这个选项。
WWWWA
2010-12-17
打赏
举报
回复
用MYSQLDUMP备份、再导入吧,否则换系统(UNIX)
象宇
2010-12-17
打赏
举报
回复
[Quote=引用 15 楼 wwwwa 的回复:]
DATA DIRECTORY INDEX DIRECTORY
windows 下这两个参数不起作用.
[/Quote]
那我该如何做,没有方法吗?
ACMAIN_CHM
2010-12-17
打赏
举报
回复
WINDOWS中不支持符号连接,所以不能实现数据库文件存储在不同位置。
WWWWA
2010-12-17
打赏
举报
回复
DATA DIRECTORY INDEX DIRECTORY
windows 下这两个参数不起作用.
象宇
2010-12-17
打赏
举报
回复
CREATE TABLE ts (id INT, purchased DATE)
PARTITION BY RANGE(YEAR(purchased))
SUBPARTITION BY HASH(TO_DAYS(purchased))
(
PARTITION p0 VALUES LESS THAN (1990)
(
SUBPARTITION s0
DATA DIRECTORY = '/disk0/data'
INDEX DIRECTORY = '/disk0/idx',
SUBPARTITION s1
DATA DIRECTORY = '/disk1/data'
INDEX DIRECTORY = '/disk1/idx'
),
PARTITION p1 VALUES LESS THAN (2000)
(
SUBPARTITION s0
DATA DIRECTORY = '/disk2/data'
INDEX DIRECTORY = '/disk2/idx',
SUBPARTITION s1
DATA DIRECTORY = '/disk3/data'
INDEX DIRECTORY = '/disk3/idx'
),
PARTITION p2 VALUES LESS THAN MAXVALUE
(
SUBPARTITION s0
DATA DIRECTORY = '/disk4/data'
INDEX DIRECTORY = '/disk4/idx',
SUBPARTITION s1
DATA DIRECTORY = '/disk5/data'
INDEX DIRECTORY = '/disk5/idx'
)
);
我现在是考虑这个问题,如何解决。
这个是手册中的例子,是在linux下的,我如何在windows中实现,可以只把表分到 F:和G:两个磁盘下。
小小小小周
2010-12-17
打赏
举报
回复
主键问题,你的表结构发出来
WWWWA
2010-12-17
打赏
举报
回复
你的代码贴出来
象宇
2010-12-17
打赏
举报
回复
[Quote=引用 10 楼 zuoxingyu 的回复:]
partition_definition:
PARTITION partition_name
[VALUES {
LESS THAN (expr) | MAXVALUE
| IN (value_list) }]
[[STORAGE] ENGINE [=] engine-nam……
[/Quote]
我看着手册尝试过,老是语法报错,所以来论坛求助,,,能不能给个实际的例子,各位达人······
zuoxingyu
2010-12-17
打赏
举报
回复
partition_definition:
PARTITION partition_name
[VALUES {
LESS THAN (expr) | MAXVALUE
| IN (value_list) }]
[[STORAGE] ENGINE [=] engine-name]
[COMMENT [=] 'comment_text' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] (tablespace_name)]
看分区的红色部分。可以指定某个分区的存储位置。
象宇
2010-12-17
打赏
举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
你是想把数据库移到另一个硬盘分区上,不是做表分区。
你可以先停止你的MYSQL服务,然后把整个DATADIR目录复制到目标硬盘分区上,然后再修改MY.INI中的DATADIR参数。再启动MYSQL就可以了。
[/Quote]
我晕,老大,我明明写的是“分”,而不是移!!!
WWWWA
2010-12-17
打赏
举报
回复
直接COPY容易出问题,INNODB引擎的表不能直接COPY,最好用MYSQLDUMP备份
小小小小周
2010-12-17
打赏
举报
回复
1:mysqldump 出来之后,修改my.cnf里面的数据目录,datadir=新的磁盘,再还原;适用myisam表.
2:要是innodb的话,dump出来之后,修改innodb_data_file_path的最后一个表空间到新的目标目录,再还原.
3:把datadir的目录整个复制到新的目标地址,再用软连接连接到旧地址,不需要修改配置文件(适用myisam)---linux
4:在data目录的同级,新加一个后缀名为sym的文件.把某个库的地址指到新地址如(E:\data\Q)----windows
iihero
2010-12-17
打赏
举报
回复
转移数据,可以直接复制DATADIR目录,再修改配置文件。
或者将整个MySQL目录转移到别的分区,然后修改配置文件,重新配置服务。
都可以的。
WWWWA
2010-12-17
打赏
举报
回复
OR
直接用MYSQLDUMP备份数据库,再新建数据库,导入备份
WWWWA
2010-12-17
打赏
举报
回复
你的MYSQL版本
http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html
手册比较详细
ACMAIN_CHM
2010-12-17
打赏
举报
回复
你是想把数据库移到另一个硬盘分区上,不是做表分区。
你可以先停止你的MYSQL服务,然后把整个DATADIR目录复制到目标硬盘分区上,然后再修改MY.INI中的DATADIR参数。再启动MYSQL就可以了。
象宇
2010-12-17
打赏
举报
回复
windows mysql 5.1 以上才有分区 手册上没有很详细的例子。
加载更多回复(7)
MySql
转换成Oracle工具
Convert
Mysql
to Oracle 最新版本:4.0 Convert
Mysql
to Oracle是一个免费的数据库转换工具,实现快速安全地将
Mysql
数据库导入为ORACLE数据库。 Convert
Mysql
to Oracle 功能特点 可以转换所有的
Mysql
字段类型 支持所有版本的
Mysql
可以将数据合并到已经存在的ORACLE
表
中 非常容易使用的向导模式 支持所有版本的
Mysql
字符集 对
超大
数据
表
的导出进行了优化
处理
Convert
Mysql
to Oracle 功能限制 不能转换
MYSQL
的存储过程 Convert
Mysql
to Oracle 运行需求 有相应的数据库操作权限 在机器中安装了ORACLE客户端,使得Convert
Mysql
to Oracle能够成功连接到ORACLE
Mysql
超大
分页怎么
处理
?
MySQL
处理
超大
分页时遇到的问题类似,如果你请求查看结果集中的第几万甚至第几十万页数据,直接用传统的LIMIT offset, rows方法(比如跳过前100000行,取10行)会非常慢,因为它实际上是从头开始数,丢掉前面的100000行,再给你后面的数据。比如,记录下上次读到的是第100000条记录,下次查询时,直接说“从第100001条开始给我10条”,这样数据库就可以直接定位,不用从头开始数了。用这些方法,
MySQL
在面对
超大
分页时,就能更快地跳到你想要的那一页,不用再一页一页慢慢翻了。
【
MySQL
】
Mysql
超大
分页
处理
正确认知:在InnoDB中,聚集索引的叶子节点直接存储完整数据行(即数据页和索引页合一)。需要扫描前 9000000+10 条记录的索引项(即使不需要数据,也要走索引链路定位到第9000000条的位置)。虽然聚集索引的叶子节点包含完整数据,但每次索引项扫描都需要访问对应的数据页(物理磁盘上的页读取)。狭义回
表
:当使用非聚集索引(二级索引)时,需要根据索引中的主键值回到聚集索引查数据。若 id 是主键或唯一索引,直接从索引树获取数据(覆盖索引,无需回
表
)
MySQL
的
超大
分页
处理
先分页查询数据的id字段,确定了id之后,再用子查询来过滤,只查询这个id列
表
的数据就可以了,因为查询id的时候,走的覆盖索引,所以效率可以提升很多。如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回
表
查询,尽量避免使用select * ,尽量在返回的列中都包含添加索引的字段。,在返回的列中,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。,从而完成复杂查询的一种编写形式。,并且需要对数据进行排序,这时候效率就很低,我们可以。
MySQL
超大
分页
处理
,以及优化思路说明。
MySQL
超大
分页
处理
,以及优化思路说明。
MySQL
56,940
社区成员
56,756
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章