2011-11-22 123 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查看帶有和不帶有特定索引的執行計劃。

相關問題