2012-04-11 63 views
0

我知道'限制'命令用於網站的分頁。
我不知道DB是否能夠找到沒有線性超過結果集的起始索引。sql'limit'命令如何在引擎蓋下工作?

例如,對於查詢「在第100到第120之間查找某個數據」,DB是否有辦法查找查詢的第100個項目,而不是線性超過100個項目?

如果確實需要進行線性搜索,那麼我認爲我在任何大網站中看到的分頁都不是通過簡單的「限制」命令實現的?

+0

我認爲這是提供商的依賴。 – kosa 2012-04-11 16:09:43

回答

0

沒有談論具體的實現,肯定有數據結構支持基於偏移量的即時查找。想想正常的C數組,整數,結構和指針(可能指向結構體)。

除此之外,關係數據庫還有各種緩存方案,因此即使第一次查找需要一段時間,後續查詢也會顯着加快。

對於實際的實現,您應該總是對索引的列使用ORDER BY和LIMIT。

+0

哦,甚至使用索引,使用大的LIMIT偏移量如1000或5000會更慢。索引使用B-樹。 – 2012-04-11 16:29:27

+0

您的評論(關於導致緩慢讀取的大偏移)和答案(即時查找)似乎會發生衝突。我可以採取它將在正常的B樹索引列緩慢? – eugene 2012-04-12 13:09:17

+0

我以「沒有談論具體實現」作爲開頭,我只是指出,有一些數據結構可以跳轉到第10000個元素,就像它到達第2個元素一樣快。它會比線性更快,但對於更深層次的索引來說速度會更慢。 – 2012-04-12 16:07:09