大型MySQL表 - 指数突破

时间:2012-04-14 14:37:48

标签: mysql datetime indexing partitioning

我有一个~100GB的MySQL表,有近10亿行。它只有8列,其中一列是索引的DateTime,通过切成薄片的“BETWEEN”查询用于大多数查找。

以前我在这个专栏上的索引工作得很好......但随着表继续增长,索引突然停止了工作。现在EXPLAIN在所有查询中都显示“使用filesort”,并且我已经为内存池提取了所有适用的my.conf值无效。

密钥可以处理的最大值是多少?像分区这样的东西会解决这个问题吗?

任何见解都将受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:2)

如果可以,请停止mysql服务器,然后转到数据文件夹并执行

myisamchk -r <table_name>

myisamchk -r -v -f <table_name>

应该修复你的桌子。您也可以尝试使用

REPAIR TABLE <table_name>

更多信息herehere

答案 1 :(得分:1)

您可以尝试按提示强制使用索引。 结帐 the mysql page explaining the index hints。一个非常快速的例子是;

SELECT * FROM table1 USE INDEX (col1_index)
  WHERE col1 BETWEEN date1 AND date2;

但我不认为这是你的主要问题。为了预见您将来可能遇到的问题,我强烈建议您仔细阅读 MySQL Resource Limits Excerpt

在某种程度上,它指出;

If you do encounter a full-table error, there are several reasons why it might have occurred: 
...
You are using MyISAM tables on an operating system that supports files only up to 2GB in size and you have hit this limit for the data file or index file.

似乎对你来说并非如此。但是你可以考虑一些可能性。

我还强烈建议您快速搜索关键字'myisampack'。