三國(guó)紛爭(zhēng)
2021-10-27 17:08:10
我試圖了解查找在數(shù)據(jù)庫中是如何工作的。在數(shù)據(jù)庫中,一切都在文件系統(tǒng)的磁盤上。所以讓我們說如果我使用一些過濾器子句查詢具有數(shù)百萬條記錄的表中的數(shù)據(jù),那么所有記錄將首先加載到內(nèi)存中,然后查找特定數(shù)據(jù)或發(fā)生其他事情?正確的 ?我的理解是,無論我們運(yùn)行什么查詢,所有數(shù)據(jù)庫表的數(shù)據(jù)都會(huì)加載到內(nèi)存中,然后執(zhí)行操作。這是正確的嗎 ?其次,如果我在表中有 8gb 的數(shù)據(jù)和 4gb ram,那可以從數(shù)據(jù)庫中獲取數(shù)據(jù)嗎?通常它可以工作,但它是否在磁盤上搜索?真的嗎 ?請(qǐng)分享您的看法。
2 回答

holdtom
TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果您正在談?wù)撌褂?SQL 的關(guān)系數(shù)據(jù)庫,那么您的假設(shè)是錯(cuò)誤的。
數(shù)據(jù)庫不會(huì)一次將所有行加載到內(nèi)存中以僅查找一行。如果 where 子句中的列有索引,則該索引將用于查找所需的行。
如果沒有索引,數(shù)據(jù)庫可能會(huì)從表中一行一行地讀取,檢查值并丟棄那些不符合 WHERE 子句過濾條件的值。因此,在任何給定時(shí)間,只有一小部分行保存在內(nèi)存中(多少取決于數(shù)據(jù)庫的實(shí)現(xiàn)、配置和選擇的執(zhí)行計(jì)劃)。
如果行不適合內(nèi)存,數(shù)據(jù)庫可能會(huì)在磁盤上執(zhí)行操作。例如,如果需要某種行,那么如果沒有足夠的內(nèi)存來將所有行保存在內(nèi)存中,那么這可能會(huì)在磁盤上完成。
當(dāng)結(jié)果返回時(shí),它也不保存在內(nèi)存中。具體如何完成取決于特定的 DBMS 產(chǎn)品。
添加回答
舉報(bào)
0/150
提交
取消