2013-04-02 42 views
2

我有一個包含樣本的表格。插入的樣本已經按照時間戳自然排序。hsqldb:我是否必須通過ORDER BY來確保一致的選擇順序?

我的問題是這樣的 - 當我從表中選擇時是否必須使用ORDER BY子句來確保提取的樣本按時間戳排序?

+0

使用順序,只是爲了更安全的一面。 – NINCOMPOOP

+0

我仍然有興趣知道是否有必要。 – mark

+0

我沒有發現它是必要的。但如果記錄數量很大,Order by子句可能會嚴重影響性能。 HSQLDB沒有有效地使用索引,這是我的經驗。 – NINCOMPOOP

回答

2

行的關係數據庫是排序(圖片它們作爲一個筐球。哪一個是「第一」?)

唯一方式(說真的,只有 )得到一致的排序結果是使用ORDER BY

你不能依賴連接的副作用,group byUNION,索引檢索或類似的操作符。他們永遠不會保證訂單。除非您指定ORDER BY,否則DBMS可自由選擇以任何它認爲最快的順序返回行。

+0

使用ORDER BY比在代碼中排序更有效嗎? – mark

+0

@mark:取決於。我會說大部分時間在服務器上排序可能會更有效率。 –

+0

如果代碼和數據庫都在同一臺機器上運行? – mark

2

如果HSQLDB表T具有C列作爲主鍵,或者具有在該列上的任何索引,

SELECT FROM T ORDER BY C 

將返回有序行,而不額外ORDER BY處理。

如果在選擇一個條件,這在不同的列使用索引,你仍然可以強制使用索引的ORDER BY:

SELECT FROM T WHERE <some condition> ORDER BY C USING INDEX 

但在這種情況下,你只應如果表格的大部分行將被返回,請使用USING INDEX。否則,最好讓引擎使用其他索引來減少表掃描時間。

如果沒有用於ORDER BY的索引,則忽略USING INDEX。

相關問題