MySQL:对于ORDER BY调用(不同的字段),我是否为每个字段创建索引?

时间:2010-08-17 20:17:48

标签: mysql query-optimization

一个简单的问题。我有一个这种结构的简单表:

USERS_TABLE = {id}, name, number_field_1, number_field_2, number_field_3, number_field_4, number_field_5

排序是一项主要功能,目前一次只有一个领域。表最多可以有5000万条记录。大多数选择是使用“id”字段完成的,该字段是主键并且已被索引。

示例查询:

SELECT * FROM USERS_TABLE WHERE id=10 ORDER BY number_field_1 DESC LIMIT 100;

问题:

我是否为每个“number_field_ *”创建单独的索引以优化ORDER BY语句,还是有更好的优化方法?感谢

1 个答案:

答案 0 :(得分:1)

这里没有灵丹妙药,你必须对你的数据和查询进行测试。

如果您的所有查询(例如WHERE id = 10)返回的行数很少,则可能不值得按列索引订单。另一方面,如果它们返回很多行,那么它可能会有很大帮助。

如果您总是按至少其中一个字段排序,请考虑在该列上创建索引,或者在某些列上创建复合索引 - 请记住,如果您在(num_field_1,num_field_2)上有一个复合索引,那么仅按num_field_2排序,不会使用该索引。您必须包含索引的最左侧字段才能使用它。

另一方面,您似乎有很多不同的字段,每个字段都创建一个索引的缺点是索引会更大,插入/删除/更新可能会更大开始变慢。

基本上 - 没有捷径。您必须使用哪些索引最适合您的查询并进行相应调整,同时使用EXPLAIN

仔细分析您的查询