4

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

以前我在该列上的索引工作得很好……但是随着表的不断增长,索引突然停止工作。现在 EXPLAIN 在所有查询中显示“使用文件排序”,并且我已经为内存池提高了所有适用的 my.conf 值,但无济于事。

钥匙可以处理的内容是否有最大值?像分区这样的东西会解决这个问题吗?

任何见解将不胜感激。谢谢!

4

2 回答 2

2

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

myisamchk -r <table_name>

或者

myisamchk -r -v -f <table_name>

那应该修理你的桌子。你也可以试试

REPAIR TABLE <table_name>

更多信息在这里这里

于 2012-04-14T19:06:28.333 回答
1

您可以尝试通过提示强制使用索引。查看解释索引提示的 mysql 页面。一个非常简单的例子是;

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”。

于 2012-04-14T19:00:43.440 回答