Oracle
為什麼第二個查詢比第一個更昂貴?
在閱讀Graph Databases書時,我遇到了以下摘錄:
我不明白為什麼第二個查詢比第一個更貴。事實上,兩者都過濾了這個
Bob
人。有人可以解釋一下嗎?
這本書假設 PersonFriend 在 PersonID 上被索引,而不是在 FriendID 上。它似乎還假設 Person 獨立索引 PersonID 和 Person。
如果是這種情況,則第一個查詢返回為
- {INDEX UNIQUE SCAN Person on Person => ‘Bob’ get back PersonID}
- {INDEX RANGE SCAN PersonFriend on PersonID => Alice 和 Zack 的 PersonID 取回 FriendID}
- {LOOP {INDEX UNIQUE SCAN Person on PersonID} for Alice 和 Zack}
然後第二個返回為
- {INDEX UNIQUE SCAN Person on Person => ‘Bob’ get back PersonID}
- {TABLE ACCESS FULL PersonFriend FOR FriendID of Bob 獲取 PersonID}
- {LOOP {INDEX UNIQUE SCAN Person on PersonID} 為朋友}
這將是一個基本的關係數據庫設計錯誤。使用這樣的關係表,您將始終索引所有鍵,並且兩個查詢的性能配置文件將無法區分(忽略值分佈的變化等)。
在這一點上,聽起來作者試圖證明關係數據庫本質上是有缺陷的。