我们的服务器数据库在 mysql 5.1 中,我们的数据库中有 754 个表。我们为每个项目创建一个表。因此,大量的桌子。从过去的一周开始,我注意到插入和更新任何表的时间都很长。如果我创建一个新表并插入其中,插入大约 300 个记录需要一分钟。
因为我们在同一台服务器中的测试数据库有 597 个表,所以在测试数据库中相同的插入非常快。
默认引擎是 MISAM。但是我们在 INNODB 中的表很少。
有几个触发器在运行。在我删除触发器后,它变得更快了。但这还不够快。
我们的服务器数据库在 mysql 5.1 中,我们的数据库中有 754 个表。我们为每个项目创建一个表。因此,大量的桌子。从过去的一周开始,我注意到插入和更新任何表的时间都很长。如果我创建一个新表并插入其中,插入大约 300 个记录需要一分钟。
因为我们在同一台服务器中的测试数据库有 597 个表,所以在测试数据库中相同的插入非常快。
默认引擎是 MISAM。但是我们在 INNODB 中的表很少。
有几个触发器在运行。在我删除触发器后,它变得更快了。但这还不够快。
使用DESCRIBE了解您的查询执行计划。
查看更多http://dev.mysql.com/doc/refman/5.1/en/explain.html以了解其用法。
正如@swapnesh 提到的, DESCRIBE 命令对于性能调试非常有用。您还可以使用以下方法检查安装是否存在问题:
你像这样使用它:
wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl
当然,这里我假设您运行某种基于 Unix 的系统。
您可以使用OPTIMIZE。根据手册,它执行以下操作:
重组表数据和关联索引数据的物理存储,减少存储空间,提高访问表时的I/O效率。对每个表所做的确切更改取决于该表使用的存储引擎
语法是:
OPTIMIZE TABLE tablename
批量制作而不是一个一个制作时,插入通常更快。尝试在每个语句中插入 10、30 或 100 条记录。
如果您使用 jdbc,您可能能够通过批处理实现相同的效果,而无需更改 SQL。