2017-06-05 20 views
0
Select row_id from table_name 
Sample 20; 

をエラーを投げている...実行SQLは、「これ以上のスプール領域エラー」これ以上のスプール領域エラーを発行しない

から20のarbitary行を取得する任意のクエリがありますより短い時間でテーブル?テーブルが非常に巨大であると仮定してください

+0

それはあなたがしていることは興味深いです単一のテーブルでスプールスペースの問題を取得することは、そのように選択します。サンプルを選択する前にすべてを計算しなければならないほど大きな実際のクエリですか?あなたは 'SELECT TOP 20'を使うことができますが、それはあまり「恣意的」でなく、もっと「取得するのが最も簡単です」 – JNevill

+0

EXPLAIN計画を見直してください。 SAMPLEは、すべてのAMPSで統計サンプルを取得するために多くの作業を行うという点で、時には邪悪になる可能性があります。 JNevillが示唆しているように、TOP20はより良い選択肢かもしれません。 TOPは、正しくリコールすれば、データで応答する最初のAMPからのデータを返さなければなりません。また、これがビューであり実際のテーブルでない場合、ビューはより多くのオーバーヘッドを引き起こす可能性があります。 –

+0

でも、トップn行のquerryを使ってみましたが、今回はquerryが "もうスプールスペースがありません"という問題は発生しませんでしたが、それ以上の時間稼働していました。いいえ、それは見解ではありません。テーブルには500以上のカラムがあり、それは巨大なものです –

答えて

0

これは、テーブルのプライマリインデックスによってかなり一般的です。主索引を使用して述部を追加する場合は、結果を戻す必要があります。

結果を制限するために、プライマリインデックスを含むWHERE句を追加するだけで、結果がスプールの問題なしで表示されるはずです。

+0

さて、PIを使用しても、*任意の行*にはなりません。そして、OPで表示されたような 'WHERE' /' JOIN'を使わない単純なSelectの場合、スプールの問題は発生しません(そうでなければ結果がスプールされ、次に 'SAMPLE' /' TOP'が適用されます) – dnoeth

0

後は実行されたクエリに説明している....まず

.... Table_TがTable_vがそのTable_T上の図である

  • テーブル名です

    • を想定すると、表示のtable_vtable_Tをロックします。

      次に、すべてのアンプでローカルに構築されたspool2(all_amps)に、(table_v.col2のビューではtable_Tがnull)という条件で、すべての行スキャンを使用して、table_vのビューからall Amp retrieveステップを実行します。入力テーブルはメモリにキャッシュされません。ビットは同期スキャンに適格です。スプールのサイズは1行(35バイト)と高い信頼度で推定されます。ステップの推定時間は2分16秒です

      すべてのアンプに対するすべての行をスキャンして、すべてのアンペアにハッシュコードで再配布された、すべての行をスキャンして、すべてのアンプ機能のステップを実行します。結果の行はspool1(group_amps)に格納され、これはアンペアでローカルに構築されます。ステップを使用して上位20行を取り出し、次にステップ4を実行します。サイズは1行41バイトと高い確信度で評価されています

      spool2(最後の使用)からすべての行をスキャンする方法で、all-amps stat関数ステップを実行します。すべてのアンプにハッシュコード。結果の行は、ローカルに作成されたspool1(group_amps)に格納されます。このステップは、上位20行を検索するために使用されます。ステップは1行(41バイト)

      最後に、我々が関与するすべてのアンペアまでのEND TRANSACTIONを送信することを高い信頼度で推定されている

      spool1の

      コンテンツがユーザーに送り返され

  • 関連する問題