相关疑难解决方法(0)

为InnoDB的ALTER TABLE优化MySQL

很快我们就需要对生产数据库进行架构更改.我们需要尽量减少这项工作的停机时间,但是,ALTER TABLE语句将运行很长一段时间.我们最大的表有1.5亿条记录,最大的表格文件是50G.所有表都是InnoDB,它被设置为一个大数据文件(而不是每个表的文件).我们在8核机器,16G内存和RAID10配置上运行MySQL 5.0.46.

我有一些MySQL调优的经验,但这通常集中在来自多个客户端的读取或写入.有关此主题的互联网上有很多信息,但是,关于(暂时)调整MySQL服务器以加速InnoDB表上的ALTER TABLE或INSERT INTO的最佳实践,似乎很少有信息可用. .SELECT FROM(我们可能会使用它而不是ALTER TABLE来获得更多机会来加快速度).

我们计划进行的架构更改是向所有表添加一个整数列,并将其作为主键,而不是当前主键.我们还需要保留"旧"列,因此不能覆盖现有值.

尽可能快地完成这项任务的理想设置是什么?

mysql performance alter-table

29
推荐指数
6
解决办法
2万
查看次数

更新内部连接子查询的数百万条记录 - 优化技术

我正在寻找一些关于如何更好地优化此查询的建议.

对于每条_piece_detail记录:

  1. 包含至少一个匹配_scan记录(zip,zip_4,zip_delivery_point,serial_number)
  2. 属于公司mailing_groups(通过一系列关系)
  3. 有:
    1. first_scan_date_time这大于MIN(scan_date_time)相关的_scan记录
    2. latest_scan_date_time这比MAX(scan_date_time)相关_scan记录少

我需要:

  1. 设置_piece_detail.first_scan_date_timeMIN(_scan.scan_date_time)
  2. 设置_piece_detail.latest_scan_date_timeMAX(_scan.scan_date_time)

由于我正在处理数百万条记录,因此我试图减少实际需要搜索的记录数.以下是有关数据的一些事实:

  1. 该_piece_details表由分区job_id,所以它似乎最有意义通过的顺序这些检查运行 _piece_detail.job_id,_piece_detail.piece_id.
  2. 扫描记录表现在包含超过100,000,000条记录,并按(zip,zip_4,zip_delivery_point,serial_number,scan_date_time)进行分区,这与用于匹配_scan和_piece_detail(除scan_date_time之外)的密钥相同.
  3. 只有大约40%的_piece_detail记录属于a mailing_group,但在我们完成连接的完整关系之前,我们不知道它们是哪些.
  4. 只有约30%的_scan记录属于_piece_detaila mailing_group.
  5. _scan每个通常有0到4个记录_piece_detail.

现在,我正在寻找一种以合适的方式执行此操作的方法.我最初是从这样的事情开始的:

UPDATE _piece_detail
    INNER JOIN (
        SELECT _piece_detail.job_id, _piece_detail.piece_id, MIN(_scan.scan_date_time) as first_scan_date_time, MAX(_scan.scan_date_time) as latest_scan_date_time
        FROM _piece_detail
            INNER JOIN _container_quantity 
                ON _piece_detail.cqt_database_id = _container_quantity.cqt_database_id 
                AND …
Run Code Online (Sandbox Code Playgroud)

mysql sql optimization mysql-5.6

7
推荐指数
1
解决办法
491
查看次数

如何检查启用/禁用键是否有效?

我有一个带有索引varchar(256)列的表.

为了加快批量插入,我禁用了密钥,插入了超过1000万个条目,然后在插入完成后重新启用密钥.

令人惊讶的是,启用/禁用键没有时间:

mysql> alter table xxx disable keys;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> alter table xxx enable keys;
Query OK, 0 rows affected, 1 warning (0.00 sec)

如何确保启用/禁用密钥正常工作?

mysql indexing performance bulkinsert

3
推荐指数
2
解决办法
8457
查看次数