我有一个大的mysql MyISAM表,行1.5mil,4.5GB大,每天都在增加。
我已经完成了所有必要的索引,并且性能得到了极大的优化。然而,数据库偶尔会因查询过载而中断(显示500内部服务器错误)。每当发生故障时,表格将开始非常缓慢地工作,我将不得不做一个愚蠢而有效的任务:将整个表格复制到一个新表格并用旧表格替换新表格!
你可能会问为什么这么愚蠢的行为。为什么不修理或优化表?我已经尝试过,但是修复或优化的时间可能不仅仅是复制表的时间,更重要的是新表的执行速度要快得多。
新建的表通常效果很好。但随着时间的推移,它将变得迟缓(可能在一个月之后)并最终导致另一次崩溃(500内部服务器)。那就是当一切都显着减慢时,我需要重复更换表的愚蠢过程。
获取您的信息: - 表中的数据很少被删除。因此表中没有很多开销。 - 在最佳条件下,每个查询需要1-3秒。但是当它变得迟钝时,相同的查询可能需要超过30秒。 - 该表有24个字段,7个为int,3个为text,5个为varchar,其余为smallint。它用于存放文章。
如果您可以解释导致缓慢的原因或者您对如何改善情况提出建议,请随时分享。我将非常感激。
答案 0 :(得分:2)
考虑转移到InnoDB。它的一个优点是它安全可靠。如果您需要全文功能,可以通过实施Sphinx或Lucene等外部工具来实现这一目标。
答案 1 :(得分:1)
分区是一种常见的策略。您可以将文章按照它们提交到数据库的月份进行分区(例如),然后让您的查询帐户返回感兴趣的月份的结果(如何对表格进行分区将取决于您和您的应用程序的设计/行为)。如果您需要将结果来自多个表格,则可以结合结果。
更好的是,根据您的MySQL版本,您的服务器可能支持分区。有关详细信息,请参阅this。