MySQL:大表,慢查询和索引

时间:2014-12-09 21:34:57

标签: mysql sql indexing

我有一个拥有近4000万条记录的MySQL表。架构如下所示:

id (Key field, unique)
data_type (Key field, enumeration of TXT, BIN, HEX)
line_number (Key field)
record_label (low cardinality)
record_value (high cardinality)

前三个字段是主键的一部分,它是唯一的。即使我使用查询中的一个关键字段,此表上的查询也会花费很长时间。这里的研究表明我需要额外的索引,但我不确定索引到底是什么。例如,像这样的查询:

SELECT * FROM my_table WHERE data_type = 'TXT' and id < 40000

在不返回结果的情况下,应该返回不超过4,000条记录运行几分钟。我是否应该为自己可能使用的每个字段创建索引,以及查询中可能出现的每个可能的字段组合?我还能做些什么来提高绩效?

感谢。 -pv -

1 个答案:

答案 0 :(得分:0)

此查询的最佳索引:

SELECT *
FROM my_table
WHERE data_type = 'TXT' and id < 40000

是复合索引my_table(data_type, id)。您可以在前两个之后添加其他列。但对于此查询,前两列需要为data_type,然后为id

MySQL对多列索引的使用非常清楚documentation,这可能有助于你弄清楚你真正需要的索引。