MySQL - 索引 - 我做错了什么?

时间:2012-10-14 12:57:41

标签: mysql indexing

我有一个包含约400个表的数据库。每个都有5列,每行1M到200M。其中一列是DATE值,是一个索引。 (还有一个不同的唯一键)。

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

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

在选择上执行'desc'表示它正在使用适当的索引并获取适当数量的值。

这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

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

我之前没有尝试过的东西,但已经看作是一个解决方案,就是将你的日期分成3个独立的字段:     今年,
    这个月TINYINT,
    thisDate TINYINT

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

并搜索那些:
    在哪里thisYear = 2001 AND thisMonth = 1 AND thisDate = 1

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