讓我們假設我使用MySQL和製作書店應用程序,它顯示所有可用圖書分頁列表(擁有百年的數百萬本圖書在它)爲數百萬頁快速分頁 - 如何?
db_table bookstore
id = auto incremented primary key
title = character field (indexed)
如果我嘗試這樣的事:
SELECT * FROM `db_table` ORDER BY `title` OFFSET 20.000.000 LIMIT 50
它會花費太多時間(可能的方式超過10秒,這是太多了)
減少這次我調整db表的模式是這樣的:
名db_table bookstore
...
alphabetically_sorted_title_number = integer field (indexed)
,然後我可以查詢的網頁是這樣的:
SELECT * FROM `db_table` WHERE `alphabetically_sorted_title_number` > 20.000.000 ORDER BY `title` LIMIT 50
將需要不到1秒 但如果我想補充一本書嗎?如果它的標題以'A'開始,那麼我將不得不更新數千萬行,以便爲它設置alphabetically_sorted_title_number
(將新圖書添加到必須列出的所有圖書中) 插入性能急劇下降,有沒有辦法避免這種情況或加快速度?我聽說PostgreSQL可以做到這一點,這是真的嗎?
如果你真的有數億行的,你可能要重新考慮其在那些單一實例的單表... – 2014-09-03 10:57:33
Eugen Rieck,是否比其他方法更好?如果oracle或postgre(就像下面提到的那樣),他們真的可以幫助嗎? – Bob 2014-09-03 14:52:12
單片RDBMS一般不會按成本進行擴展,一旦您達到數百萬行和每秒數千次查詢。 – 2014-09-03 16:10:12