一个简单的问题。我有一个这种结构的简单表:
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语句,还是有更好的优化方法?感谢
答案 0 :(得分:1)
这里没有灵丹妙药,你必须对你的数据和查询进行测试。
如果您的所有查询(例如WHERE id = 10)返回的行数很少,则可能不值得按列索引订单。另一方面,如果它们返回很多行,那么它可能会有很大帮助。
如果您总是按至少其中一个字段排序,请考虑在该列上创建索引,或者在某些列上创建复合索引 - 请记住,如果您在(num_field_1,num_field_2)上有一个复合索引,那么仅按num_field_2排序,不会使用该索引。您必须包含索引的最左侧字段才能使用它。
另一方面,您似乎有很多不同的字段,每个字段都创建一个索引的缺点是索引会更大,插入/删除/更新可能会更大开始变慢。
基本上 - 没有捷径。您必须使用哪些索引最适合您的查询并进行相应调整,同时使用EXPLAIN
仔细分析您的查询