2012-03-04 97 views
1

我正在使用MyISAM唯一的数据库,并且大表上的更新花费了太多时间。桌子的大小约为30GB(MYD和MYI各15GB)。无论如何,除了看索引,我还可以提高速度吗?优化更新声明

+0

没有看到你的表结构nd更新查询是非常困难的。请提供更多信息。 – 2012-03-04 07:07:14

回答

1

的MyISAM键缓存调整: http://docs.oracle.com/cd/E19957-01/mysql-refman-5.4/optimization.html#myisam-key-cache

一般性能优化:(有很多) http://docs.oracle.com/cd/E19957-01/mysql-refman-5.5/optimization.html

30 GB是相当大的,你运行一个高端服务器?

+0

Mysql消耗超过100%的CPU,有时CPU显示30-50%的最高输出。这是正常的吗?另一个问题是,如果我在更新记录之前选择,是否会使用缓存? – shantanuo 2012-03-04 07:23:42

+0

取决于它运行的机器。我已经在这个太高的地方运行了小型服务器,并且我一直在共享网络主机上,因为它运行的是24个核心,所以100%cpu时间不算什么。然而,即使对于具有许多内核和大量内存的服务器,30GB也是相当高的(许多高端服务器在2012年只能处理32-64个内存)。如果你有一小部分查询被频繁访问,那么它可能是好的。如果你正在查询一个大集合,并且没有太多的db存储在RAM中,那么你的大瓶颈就是需要将这些文件从光盘分页到RAM中。 – SinisterRainbow 2012-03-17 02:25:00

1

如果您正在加载大量数据,请查看批量插入命令,或根据具体情况加载数据infile。

如果你正在做大量的插入,可能值得在插入之前测试关键的禁用。它可能有助于加快速度。

使用

insert into myTable values("rec1","hello"),("rec2","world"),("rec3","cheesy huh"); 

将在1条语句插入3条记录 - 同样,你需要对其进行测试。

我已经完成了这种形式的插入与成千上万的行,它在我的例子中效果很好。

0

一些笔记可以interessting:

  • 更改存储引擎(InnoDB的是高容量表更好)
  • Partitionate您的表(或整个DB)划分为多个逻辑片(如数据按年,本月,区域等),所以表格会更多,但较小的
  • 确保MySQL的加入缓冲区的大小和类似的指标是足够大的快速交付