2

RでRSQLITEを使用してデータベースを構築し、「JOIN」操作を行い、次を使用して行を抽出しています。

    res<-dbSendQuery(con," SELECT DISTINCT all_transcript.transcript1 from temp LFET OUTER JOIN....")

合計 16 の JOIN 操作があります。fetch(res) が 500 (デフォルト) の行数を返すため、上記のコマンドが正常に機能していることを確認します。また、限られた数の行でのみ機能します。しかし、すべての行数を抽出するために fetch(res,n=-1) を指定するとハングします。何か案が?fetch(res,n=4000) を指定したところ、応答しません。

R の sessionInfo:

sessionInfo():
R version 2.14.1 (2011-12-22)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C                 LC_NAME=C
[9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
 [1] RSQLite_0.11.1 DBI_0.2-5
4

1 に答える 1

3

簡単な答え: 重要なクエリの 16 JOINS は、クエリやデータベースが適切に設計されていないことを意味します。改善方法 - 結合を減らす:

  1. サマリー テーブル、非正規化テーブルの作成
  2. クエリ プランのできるだけ早い段階でフィルターをデータに適用してクエリを調整し、結合されるデータを少なくします。
  3. より強力なサーバーに db を保持し、別の DB エンジンを使用し、R アプリでその DB にクエリを実行し、結果を sqlite に格納するだけです

クエリの最適化とパフォーマンスのチューニングについても、多くの調査を行うことができます。

于 2013-06-25T07:51:17.763 に答える