2010-08-17 30 views
1

一个简单的问题。我有一个这样的结构简单的表格:MySQL:对于ORDER BY调用(不同的字段),我是否为每个字段创建一个索引?

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

这里没有银弹,你将不得不测试你的数据和你的查询。

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

如果您总是按照至少一个字段进行排序,请考虑在该列上创建索引,或在其中某些列上创建复合索引 - 请记住,如果(num_field_1,num_field_2)上有复合索引并且你只能通过num_field_2命令,该索引不会被使用。您必须包含索引的最左边的字段才能使用它。

另一方面,你似乎有很多不同的领域你排序,创建一个索引在每一个索引上的缺点是你的索引会大得多,而你的插入/删除/更新可能会开始变慢。

基本上 - 没有捷径。您必须充分利用哪些索引最适合您的查询和相应调整,同时仔细分析您的查询与EXPLAIN

+0

感谢您的答案。我不确定排序返回的50k记录是否很重要。我想了很多。我一定会使用EXPLAIN功能来检查。 – Amer 2010-08-17 21:11:34

+0

50k可能会算很多。 – nos 2010-08-17 21:25:58

相关问题