1

我有一个大约 400 个表的数据库。每列有 5 列,行数为 1M-200M。其中一列是 DATE 值并且是一个索引。(还有一个不同的唯一键)。

当通过执行“select * from table where <date field> = ?”遍历这些表时 我发现响应时间与日期按行排列的位置成正比。IE 如果最早的日期是“2001-01-01”,最近的日期是“2010-12-01”,每个日期的行数大致相等,2010 年的选择比 2001 年慢得多。

数据按日期递增的顺序写入表中(较低的 PK 值 = 较早的日期)。

在 select 上执行“desc”表明它正在使用适当的索引并获取适当数量的值。

这是预期的行为吗?

4

1 回答 1

0

您是否尝试过在它们上运行 ANALYZE 或 OPTIMIZE TABLE?也许指数需要重组。

我以前没有尝试过但已将其视为解决方案的方法是将您的日期拆分为 3 个单独的字段:thisYear YEAR、
thisMonth TINYINT、
thisDate TINYINT

和索引:
INDEX dateIDX (thisYear, thisMonth, thisDate)

并搜索:
WHERE thisYear = 2001 AND thisMonth = 1 AND thisDate = 1

如果您使用的是 MySQL 5.1 或更高版本,您可以尝试对数据进行分区。 http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html 对于以前的版本,MERGE 表也可能有帮助。

于 2012-10-15T13:39:18.923 回答