【发布时间】:2012-02-18 06:46:38
【问题描述】:
我有一个大约 700 万行的表,我不断地运行这种查询:
SELECT
MyField,
COUNT(*)
FROM
MyTable
WHERE
MyField2='ConstantValue'
AND MyField NOT IN ( SELECT Field
FROM AnotherTable)
AND Timestamp >= [ArbitraryTimestamp]
GROUP BY
MyField;
上述字段的基数:
- MyField = 大约 40,000 个不同的值。
- 时间戳 = 大多数是不同的,因此大约有 700 万个不同的值。
- MyField2 = 2 个不同的值。
- 来自 AnotherTable 的字段 = 大约 50 个不同的值。
正如预期的那样,这运行得非常慢,使用EXPLAIN 告诉我我是Using where; Using temporary; Using filesort。
我想通过向该表添加索引来提高这些查询的效率,但我不确定最好的方法是什么。
我应该在MyField 上添加索引吗?并索引Timestamp?两个都?两者的组合索引?
另外,我还能做些什么来加快这类查询的速度吗?
【问题讨论】:
-
如果查询不完整,我们无法为您提供完整的答案,请发布 WHERE 子句的“...”。
-
其他琐碎的选择标准非常重要。索引的使用取决于
WHERE中的所有内容。 -
好的,已更新问题。
标签: mysql sql optimization indexing query-optimization