这两天正好数据库模型升级。用的是5.1.23的mysql版本,调整了一下原先表的字段类型大小。具体是把原来的表先改名,然后新建表结构和索引。
例如,原来表名用test1,我先把表名改成test1_old。然后我重新建张test1表和索引(一些值的字段类型和索引值有一些变更)。建好后我再通过
insert into test1 select * from test1_old;
把原来旧表的值插入到新表中去。
而且执行时,如果表数据较大一般大于10G左右,就会出现.TMD的临时文件。
30G的数据要跑24小时。想问下有没有更快的方法?
2003 adserver系统,8G内存,4颗CPU(8核)硬RAID5磁盘
my.ini的相关配置如下,
master-retry-count=0
master_connect_retry=1
slave_net_timeout=30
max_connections=1000
max_connect_errors=20000
max_binlog_size=800M
key_buffer=512M
max_allowed_packet=512M
table_cache=512
sort_buffer_size=64M
join_buffer_size=32M
thread_cache=16
thread_concurrency=32
max_connections = 1000
max_connect_errors=20000
log-slow-queries
long_query_time=0.001
log-queries-not-using-indexes
default-character-set=gbk
skip-character-set-client-handshake
slave-skip-errors=1062,1053,2013,1310
enable-named-pipe
skip-name-resolve
tmp_table_size=128M
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=128M
myisam_repair_threads=8
ssl-ca=c:/openssl/cacert.pem
ssl-cert=c:/openssl/server-cert.pem
ssl-key=c:/openssl/server-key.pem
##
memlock
table_cache=200
key_buffer_size=128M
query_cache_size=1200M
join_buffer_size=16M
query_cache_limit=8M
bulk_insert_buffer_size=256M
myisam_recover
[myisamchk]
key_buffer = 512M
sort_buffer_size=512M
read_buffer=128M
write_buffer=128M
back_log=512
mysql重建表和索引的速度问题
答案:2 悬赏:40 手机版
解决时间 2021-02-01 14:58
- 提问者网友:献世佛
- 2021-02-01 00:48
最佳答案
- 五星知识达人网友:我住北渡口
- 2021-02-01 01:59
30G的数据要跑24小时,哈哈,建议如下的步骤进行:
建表(不要主键);
插入数据;
重新建立索引和主键;
因为在有索引的情况下插入数据时,插入一条就要重新建立索引一次,所以应该在没有任何索引的情况插入数据,然后建立索引就搞一次索引。
建表(不要主键);
插入数据;
重新建立索引和主键;
因为在有索引的情况下插入数据时,插入一条就要重新建立索引一次,所以应该在没有任何索引的情况插入数据,然后建立索引就搞一次索引。
全部回答
- 1楼网友:举杯邀酒敬孤独
- 2021-02-01 02:14
select * from a,b where a.id=b.id and a.id = 123;
再explain一下看看?
因此,其实已经使用了。但是因为你的查询里对“左表a”没有条件,是全部输出的,因此不会用上a的索引,同时由于需要在b表里用id关联a表,因此就用上了b表的索引。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯