Customer
Subscription
Newspaper
ここで、Subscription
は他の2つの間の関係です。特定の個人が購読している新聞の名前が必要な場合は、allSubscription
と呼ばれる配列を作成し、顧客のIDを含むタプルをRAMで検索し、新聞のリストを取得するクエリをすべてSubscriptions
のリストに取得する必要がありますids。これにより、Newspaper
テーブル全体を検索し、allNewspaper
という配列を取得するすべての新聞の名前のリストを取得し、RAMに登録されているIDを含むタプルをRAMで検索することができます。このメソッドは結合のシミュレーションですが、結合はありません。RAMクエリvs参加
データベースは、このようなクエリに対して最適化されていることを非常に早く学びます。この方法は使用しないでください。しかし、すべてのお客様にこのような名前が必要な場合はどうですか?
この場合、tradionalクエリは3つのテーブルを結合します。しかし、今説明したRAM検索を使用すると、3つの配列allCustomers
,allSubscriptions
,allNewspaper
があり、3つのテーブルの結合をクエンチするよりも安価であるようです。最後に、我々はいくつかのFORSからの結果を持っている、のような、言う:それに
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],
は、よりadvicedかつ効率的であるアプローチ、言いましたか?
これはSQLではないので、なぜSQLタグですか? –
私のデータベースはあなたのRAMより大きいです。また、すべてのレコードを*フェッチする必要がないため、高速です。 – wildplasser