我有一个大型的MySQL MyISAM表,有1.5mil行和4.5GB大,每天仍然在增加。大型MySQL表 - 需要建议
我已经完成了所有必要的索引,并且性能已经大大优化。然而,通常由于查询过载,数据库偶尔会出现故障(显示500内部服务器错误)。每当出现故障时,桌子开始工作得非常缓慢,我必须做一个愚蠢但有效的任务:将整个桌子复制到一个新桌子上,并用新桌子替换新桌子!
你可能会问为什么这么愚蠢的行动。为什么不修理或优化桌子?我已经尝试过了,但是修复或优化的时间可能不仅仅是复制表的时间,更重要的是新表的执行速度要快得多。
新建表通常工作得很好。但随着时间的推移,它会变得缓慢(可能在一个月后),并最终导致再次发生故障(500台内部服务器)。这就是当所有事情都显着放缓时,我需要重复替换表的愚蠢过程。
对于您的信息: - 表中的数据很少被删除。所以表中没有太多的开销。 - 在最佳条件下,每个查询需要1-3秒。但是当它变得呆滞时,相同的查询可能需要超过30秒。 - 该表有24个字段,7个是int,3个是文本,5个是varchar,其余都是smallint。它用来保存文章。
如果你可以解释是什么原因导致呆滞,或者你有什么建议改善情况,请随时分享。我会非常感激。
一个问题:该表使用任何可变长度的行吗? – zebediah49 2010-08-03 05:14:11
你可以发布你的查询和“EXPLAIN”输出吗? – 2010-08-03 05:15:53
对于除int,text,varchar和smallint之外的zebediah,此表不使用其他类型。文本中的长度可能会有所不同。 对于Maris,表格通过索引进行了很好的优化。每个询问都是在不需要分类的情况下完成的。我使用Explain来检查每个查询以确保每个查询都得到优化。 – Judy 2010-08-03 05:24:38