假設我們有3個表,Customer
,Subscription
, Newspaper
,其中Subscription
是另外兩個之間的關係。如果我們想要某個人訂閱的報紙名稱,我們可以進行查詢以獲取所有Subscriptions
的列表,生成一個名爲allSubscription
的數組,然後在RAM中搜索包含客戶ID的元組並檢索報紙列表IDS。有了這些,我們可以得到所有報紙名字的列表,查詢整個Newspaper
表,獲得allNewspaper
數組,並在RAM中搜索包含我們知道該人訂閱的ID的元組。這種方法是對連接的模擬,但沒有連接。RAM查詢vs加入
我們很早就知道數據庫針對這種查詢進行了優化,我們不應該使用這種方法。但是,對於每個客戶我們需要這種名稱的情況呢?
在這種情況下,傳統查詢將連接3個表。但是,如果我們使用剛描述的RAM搜索,我們將有3個數組,allCustomers
,allSubscriptions
,allNewspaper
,其中似乎總共比查詢三個表的連接更便宜。最後,我們從結果一些維權,比如,說:
ramSubs = {}
for c in allCustomers:
ramSubs[c.id] = []
for s in allSubscriptions:
ramSubs[s.customer_id].append(s.newspaper_id)
ramNews = {}
for n in allNewspaper:
ramNews[n.id] = n.name
for c in allCustomers:
print c.name
for c_id,n_id in ramSubs:
print ramNews[n_id],
隨着中說,這得諫和高效?
這不是SQL - 那爲什麼是SQL標記? –
我的數據庫比你的RAM大。它也更快,主要是因爲它不需要獲取所有記錄。 – wildplasser