我试图通过临时禁用其索引来加速InnoDB表中的批量插入:
ALTER TABLE mytable DISABLE KEYS;
Run Code Online (Sandbox Code Playgroud)
但它发出警告:
+-------+------+-------------------------------------------------------------+
| Level | Code | Message |
+-------+------+-------------------------------------------------------------+
| Note | 1031 | Table storage engine for 'mytable' doesn't have this option |
+-------+------+-------------------------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我们如何禁用索引?
在进行批量插入时,有哪些替代方法可以避免使用索引?
我们怎样才能加快这个过程?
在大型mysql表中添加新列的最快方法是什么?
更改表添加列创建完整表的副本,然后使用新的create table替换旧表.在此过程运行时,原始表是可读的,但所有插入和更新都会停止.
在大型表格上,副本可能需要很长时间,有没有办法减少它?
我在本地安装了InnoDB的MySQL 5.5.37和Ubuntu 13.10上的apt-get.我的机器是台式机上的i7-3770 + 32Gb内存+ SSD硬盘.对于仅包含150万条记录的表"mytable",以下DDL查询需要超过20分钟(!):
ALTER TABLE mytable ADD some_column CHAR(1) NOT NULL DEFAULT 'N';
Run Code Online (Sandbox Code Playgroud)
有没有办法改善它?我检查了
show processlist;
Run Code Online (Sandbox Code Playgroud)
它显示它出于某种原因正在复制我的表格.令人不安的是令人不安的.有没有办法关掉这个副本?是否有其他方法可以提高向大表添加列的性能?
除此之外,我的数据库相对较小,只有1.3Gb转储大小.因此它(理论上)应该100%适合记忆.
有设置可以帮助吗?迁移到Precona会改变一切吗?
补充:我有
innodb_buffer_pool_size = 134217728
Run Code Online (Sandbox Code Playgroud) 我们遇到一个问题,即mysqldump脚本占用90%的时间来填充它处理的少量表.消除FK和索引消除了速度问题,但不是一个可接受的解决方案.
转储脚本确实有:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Run Code Online (Sandbox Code Playgroud)
我们可以期待任何不同的行为ALTER TABLE foo DISABLE KEYS吗?
此外,是disable keys 会话作用域还是永久性的,直到我重新启用它?我可以从一个mysql会话中禁用密钥并使其影响从另一个会话发出的导入吗?
我有一张约200,000条记录的表格.我想为它添加一个字段:
ALTER TABLE `table` ADD `param_21` BOOL NOT NULL COMMENT 'about the field' AFTER `param_20`
Run Code Online (Sandbox Code Playgroud)
但它似乎是一个非常繁重的查询,它需要很长时间,即使在我的Quad amd PC上有4GB的RAM.
我在windows/xampp和phpMyAdmin下运行.在添加字段时,mysql是否与每条记录都有业务往来?或者我可以更改查询,以便更快地进行更改吗?
ALTER TABLE customers ADD split INT(1);
10密耳.记录......我执行了这个命令1小时仍在加载..有什么方法可以让它更快完成?