我有 RHEL 5 平台和 8G RAM 和 MySQL 版本 14.12 distrib 5.0.86。我想在一个 InnoDB 表中创建索引,但是需要很长时间:
Time | State | Info
2291 | copy to tmp table | create index index_test
Run Code Online (Sandbox Code Playgroud)
该表有 8,000,000 行,在 /etc/my.cnf
innodb_buffer_pool_size = 4G
Run Code Online (Sandbox Code Playgroud)
但还是太慢了。
如何使 innodb 表中的创建索引更快?
我已经有了这些变量:
read_buffer_size = 2M
sort_buffer_size = 8M
tmp_table_size = 64M
Run Code Online (Sandbox Code Playgroud)
显示创建 user_t\G
CREATE TABLE `user_t` (
`t_id` mediumint(8) unsigned NOT NULL auto_increment,
`user_id` varchar(50) NOT NULL default '',
`event_time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`user_A` double(11,2) NOT …Run Code Online (Sandbox Code Playgroud) +----+--------------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+--------------+-----+-----------+----------+
| 1 | Ramesh Olive | 32 | Ahmedabad | 2000.00 |
| 2 | Tan Kau | 25 | Delhi | 1500.00 |
| 3 | Jason Tan Kau| 25 | Delhi | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Hardik Jass | 27 | Bhopal …Run Code Online (Sandbox Code Playgroud) 我发现这些文件位于Windows 2008 服务器上的wamp\bin\mysql\mysql5.5.24\data文件夹中。
它们在 40 GB 驱动器上消耗大约 22 GB。

我正在使用名为moodle 的LMS,这可能会启动它们的创建,我不确定。
我试图确定:
什么是创建这些文件?
我可以删除它们以回收驱动器空间吗?
我有一个表,其中包含一个经常写入的事件日志,相比之下,它很少读取。我很想使用ARCHIVE引擎,因为它基本上就是为此而设计的。但是,我的托管服务提供商不提供此引擎。
唯一可用的(有用的)选项是 MyISAM、InnoDB 和 CSV。我敢肯定,我应该不使用CSV这个选项,让我们优惠的那一个。
我正在寻找的是提供最佳替代方案的引擎,请记住以下几点:
所以基于此,InnoDB 或 MyISAM 哪个更好。我知道这台服务器上安装的 MyISAM 引擎只支持 2^32 行。如果 InnoDB 对压缩有类似的支持并且支持更多的行,那会更好(但我不知道是不是这样)。
我主要对 InnoDB 感兴趣,但也对 MyISAM 感兴趣。
我环顾 information_schema 并没有在任何地方看到这些数据。
我正在使用 MySQL 5.5.16。
当在线阅读有关 innodb_log_file_size 时,它说
日志文件的总大小必须小于 4GB
那么如果它需要更大呢?
在书籍和网上,它说将 innodb_log_file_size 设置为至少一个小时的写入值。
目前我有 2 个 1GB 的日志文件,在计算Innodb_os_log_written1 小时时,至少需要 10GB。2GB 的日志文件只能在我们的峰值负载下进行 20 分钟的写入。
蒂亚!
我有一个 MySQL 开发服务器,它在某些数据库中使用 InnoDB 表。它最初是使用默认值设置的,因此所有数据都进入系统表空间(例如主表空间)ibdata1文件)。一路上,我启用了innodb_file_per_table以便新的数据库表进入它们自己的文件。
我现在想通过删除一些开发数据库来回收磁盘空间。我知道我必须 mysqldump 并重新导入系统表空间中的那些数据库。确定重点关注哪些的最佳方法是什么?
我没有看到任何明显的东西 information_schema数据库中。我可以使用 SSH shell 手动浏览服务器,但我正在寻找一种更自动化或更优雅的方式来做到这一点。
在一些较旧的数据库中,我只看到.frm数据库目录中的文件,在较新的数据库中我看到.frm并.ibd文件。这似乎是知道数据在哪里的关键......
健全性检查:是否可以通过 mysqldump 一半的数据库来回收空间,或者你真的必须对每个数据库都做?该服务器中有 54 个使用 InnoDB 表的数据库。
注意:在 UNIX 上使用 MySQL v5.1。
我在集群中使用流式复制和 PITR(WAL 文件),目前我有不同版本postgresql.conf的主服务器和备用服务器。
文件中唯一的区别是归档命令,它指向不同的目录。
例如,在主人我有:
archive_command = 'cp %p /dbckp/server1master/%f'
Run Code Online (Sandbox Code Playgroud)
在待机状态下:
archive_command = 'cp %p /dbckp/server2master/%f'
Run Code Online (Sandbox Code Playgroud)
我认为,如果备用系统在“备用模式”下没有生成任何档案,我可以使用相同的目录并在单个postgresql.conf.
AUTOCOMMIT = 0如果插入查询看起来像这样,在 MySQL 中批量插入数据之前使用(用于性能调整)是否更好
INSERT INTO SomeTable (column1, column2) VALUES (val1,val2),(val3,val4),... ?
无论使用的实际 SQL 数据库系统如何,是否有统一的方法来检查给定列的 INDEX 是否存在?
例如,对于 MySQL,可以使用SHOW CREATE TABLE mytable. 如果列mycolumn有一个索引,结果会是这样的:KEY 'Index_1' ('mycolumn')。
这个指标KEY是所有SQL数据库系统统一的吗?
有没有更好的方法来检查索引?
mysql ×9
innodb ×6
mysql-5.5 ×3
index ×2
myisam ×2
auto-commit ×1
duplication ×1
group-by ×1
logs ×1
mysqldump ×1
postgresql ×1
replication ×1
tuning ×1
windows ×1