按列排序是否必须是索引的一部分

时间:2011-11-22 13:35:31

标签: mysql sql

create table foo (id, name varchar(255));
create table foo_values (id, foo_id, name varchar(255), value varchar(255));

create table bar (id, name varchar(255));
create table bar_values (id, bar_id, name varchar(255), position integer);

我们的查询看起来像

select * from foo_values where foo_id=<foo_id> and name=<some-name> order by value;
select * from bar_values where bar_id=<bar_id> and name=<some-name> order by position;

We have a multi key index for foo_id and name in foo_values.
We have a multi key index for bar_id and name in bar_values.

在各自的键索引中包含值和位置是否有意义,或者是否需要它。

4 个答案:

答案 0 :(得分:3)

不,我认为它不会产生影响,看看你是否可以衡量它。

答案 1 :(得分:2)

不,您可以按任何列进行排序,无论是否编入索引,但将其编入索引可能会加快查询速度。

答案 2 :(得分:2)

如果你向foo索引添加值并且位置到条形索引它可能会更快,但只有这些查询会降低性能(特别是如果那些列不是相对静态的,因为索引键会移动写作。

所以它有意义(如果在该密钥中有很多行要排序)。

查看索引效果的最佳方法是使用EXPLAIN查看包含和不包含特定索引的执行计划。

答案 3 :(得分:0)

  • ORDER BY关键字用于按指定列对结果集进行排序。
  • 默认情况下,ORDER BY关键字按升序对记录进行排序。
  • 如果要按降序对记录进行排序,可以使用DESC关键字。

所以,,order by不需要成为索引的一部分。 虽然,如果有数百万条记录,您应该为每条记录制作一个索引。