Oracle

為什麼第二個查詢比第一個更昂貴?

  • July 13, 2014

在閱讀Graph Databases書時,我遇到了以下摘錄:

在此處輸入圖像描述

我不明白為什麼第二個查詢比第一個更貴。事實上,兩者都過濾了這個Bob人。

有人可以解釋一下嗎?

這本書假設 PersonFriend 在 PersonID 上被索引,而不是在 FriendID 上。它似乎還假設 Person 獨立索引 PersonID 和 Person。

如果是這種情況,則第一個查詢返回為

  1. {INDEX UNIQUE SCAN Person on Person => ‘Bob’ get back PersonID}
  2. {INDEX RANGE SCAN PersonFriend on PersonID => Alice 和 Zack 的 PersonID 取回 FriendID}
  3. {LOOP {INDEX UNIQUE SCAN Person on PersonID} for Alice 和 Zack}

然後第二個返回為

  1. {INDEX UNIQUE SCAN Person on Person => ‘Bob’ get back PersonID}
  2. {TABLE ACCESS FULL PersonFriend FOR FriendID of Bob 獲取 PersonID}
  3. {LOOP {INDEX UNIQUE SCAN Person on PersonID} 為朋友}

這將是一個基本的關係數據庫設計錯誤。使用這樣的關係表,您將始終索引所有鍵,並且兩個查詢的性能配置文件將無法區分(忽略值分佈的變化等)。

在這一點上,聽起來作者試圖證明關係數據庫本質上是有缺陷的。

引用自:https://dba.stackexchange.com/questions/71380