2011-11-22 108 views
0
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); 

我们查询会是什么样是否ORDER BY列必须是索引

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. 

是否有意义,包括在各自的关键指标值和位置或者是它不需要的部分。

回答

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

因此,没有,顺序不需要是索引的一部分。 尽管如果有数百万条记录,您应该为它们中的每一条做一个索引。

+0

如果您将第三列添加到多键索引,它会更慢。 –

2

不,您可以按任何列进行排序,索引或不索引,但索引它可能会加快查询速度。

+0

不!我不这么认为。我认为DBMS处理来自主要WHERE子句的结果集,并且独立于ORDER BY对结果集进行排序,而不涉及INDEX。 –

3

不,我不认为它会有所作为,看看你是否可以衡量它。

2

如果给foo索引添加值并将其定位到条索引,它可能会更快,但仅限于这些查询,并且会降低性能(尤其是如果这些列不是相对静态的,因为索引键将会移动)写入。

所以它可能是有意义的(如果有很多行要在该键内排序)。

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

相关问题