2014-06-25 84 views
1

我的問題很簡單,一個記錄:讓我們說,我有假設18446744073709551615記錄在一個表(最大數量),但我想從這些記錄僅選擇一個這樣的事情:
MySQL的 - 選擇18446744073709551615個記錄

SELECT * FROM TABLE1 WHERE ID = 5 

1.-結果是否會很慢出現?

,或者如果我有另一個表只有五記錄和我做同樣的查詢

SELECT * FROM TABLE2 WHERE ID = 5 

2:將結果顯示在相同的速度在第一選擇還是會快很多在另一個呢?

謝謝。

+0

似乎很容易測試...你有沒有試過? –

+0

@David:是的,只需在您的硬盤上加載2 ** 64值?由此,我們在Facebook上爲所有對象使用64位標識符。這是一個很大的規模。 –

+0

@JeffFerland我明白了。我不讚賞這個規模。但是,從一張足夠大但仍然可管理的數據庫(例如2^32條記錄)的表格中不能明確答案? –

回答

4

用完數據庫的處理能力之前假設爲簡單起見,該ID列是一個定點寬度主鍵。它將在大約64個索引查找中找到(Wolfram Alpha on that)。由於MySQL/InnoDB使用BTrees,它將比磁盤尋找的要少一些。

在百萬分之一中搜索將大致索引查找。在5個值中尋找將需要3 index lookups,整個頁面可能會合併到一個塊中。

大部分速度差異將來自正在從磁盤讀取的數據。索引分支應該是一個相對較快的操作,從功能上講,一旦值被緩存在RAM中,你就不會注意到這種差異。也就是說,當你第一次選擇行時,從旋轉磁盤讀取數據會稍微有些困難,但如果你要重複這些操作,則5和2行的速度基本相同查詢(甚至忽略查詢緩存)。

3

沒有第一個幾乎肯定會比第二個慢,但可能不是慢得多,只要你在ID列上有一個索引。

使用索引,您可以高效地查找滿足條件的第一條記錄,然後所有其他記錄都將靠近(在索引結構中,不一定是數據區域)。

我說你就更有可能與第一個跑出來的磁盤存儲你:-)