Re: [SQL ] ROWID
※ 引述《bohei (run and fall)》之銘言:
: 不知道有沒有人知道這個東西QQ
: 每一ROW一定會有一個ROWID
: 我在網路上搜尋到的資料是ROWID會隨著TABLE改變而改變
: 如果有一個查詢、新增的程式
: 他利用ROWID去做搜尋的動作
: 在TABLE修改後也馬上更新PK跟ROWID之間的關係
: 他用ROWID當搜尋條件而不用PK
: 目的只是為了搜尋速度嗎?
: 用了ROWID當條件做搜尋
: 在資料量很大很大的時候
: 速度會遠比用PK當條件還快嗎?
: 還麻煩各位高手解答!
ROWID會比PK快很多,尤其是資料量大的時候。以Oracle為例,光從ROWID
就可以這個row是屬於那一個object, 位置在那一個datafile, 那一個block,
和這個block的第幾row。
但ROWID照你說的很有可能會隨著Table改變而改變,如果要在每一次Table修改
後去記錄PK和ROWID的關係,即使不考量記錄的量大不大,這每一次的記錄過程
等於是一次的 table scan,資料量大的時候可以跑很久。除非你在一個大的
table中只有少量的row要記錄,或是table被更新的機會很小,且更新後有一段
時間容許做 table scan,不然這不是一個很好的方法。
補充一點: 當一個row被更新時,他的ROWID可能不會立刻更新,如果這個block在
buffer pool 待一陣子,ROWID會等到後來被寫回 disk 時才被更新。
所以更新一個row後立刻記錄ROWID有可能會記錄到舊的。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 71.142.84.182
※ 編輯: FireLake 來自: 71.142.84.182 (07/03 04:21)
推
07/03 04:20, , 1F
07/03 04:20, 1F
推
07/03 04:24, , 2F
07/03 04:24, 2F
推
07/03 04:29, , 3F
07/03 04:29, 3F
推
07/03 04:34, , 4F
07/03 04:34, 4F
推
07/03 10:37, , 5F
07/03 10:37, 5F
推
07/03 11:49, , 6F
07/03 11:49, 6F
→
07/03 12:17, , 7F
07/03 12:17, 7F
→
07/03 13:04, , 8F
07/03 13:04, 8F
→
07/03 13:13, , 9F
07/03 13:13, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):