2 つの大きなテーブルで単純な自然結合を実行しています。
- ポリゴンには 68,000 行 (45 MB) が含まれます
- roadshydro には約 200 万行 (210 MB) が含まれています。
これは、データベース エンジンが内部で自然結合を実行しながら、68,000*200 万行のデータ セットを作成するということですか。その場合、必要なメモリの量は 45*210 MB である必要があり、これは私のシステムの容量 (わずか 1.5 GB) よりもはるかに大きくなります。
このクエリを実行すると、5 分後にシステムがクラッシュします (突然シャットダウンします)。データベースで 250 MB のデータを処理できないのですか? では、データベースは何の役に立つのでしょうか?
"I am modifying the above Question to clear the doubts of readers. 29-02-2012 today."
上記の質問で「自然結合」という言葉に言及したため、多くの友人が混乱したようです。私が使用していた実際の空間クエリは次のとおりです。
select p.OID , r.OID
from poygons as p , roadshydro as r
Where st_intersects(p.the_geom , r.the_geom) ;
ここで、polygon と roadshydro テーブルには、それぞれ OID と the_geom という 2 つのフィールドがあります。明らかに、これは 2 つのテーブルの外積であり、いくつかの共通キーでの Natural Join ではありません。
上記のクエリを実行すると、メインメモリの消費量を監視します。それは何も起こりません。メモリ消費量はわずかでもなく、出力も得られませんが、CPU 使用率はほぼ 100% です。データベースはまったく計算を行っていないようです。ただし、クエリから where 句を削除すると、メイン メモリの消費量が徐々に高くなり (5 ~ 6 分後)、システムがクラッシュし、マシンが突然シャットダウンします。これが私が経験していることです。where句を削除することの何が特別なのですか?postgres がクエリの実行に失敗する理由 !! この行動にビックリ。