假设我们有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