ポスト

しごおわ。SQLってleft joinすると遅くなるのか。。。データが取得できず全然分析に進めない。 大規模データをjoinするときって素早く処理する方法あるんですかね。。。

メニューを開く

みんなのコメント

メニューを開く

where文で件数を大きく絞って、テンポラリーを作成してから、joinすると速いです。件数を絞る条件がある前提ですが、負荷の大きいjoinする前に、入力件数を減らす事をまず考えることをおすすめします。

メニューを開く

joinする対象を小分けにするとかですかね。 キーを探す量が減れば速くはなると思います。 結合したら後から連結します。

walker@Data Scientist & Quantum Computing Engineer@Ayumu_walker

メニューを開く

列志向DBをおすすめします。clickhouseみたいな。

里見恵介@エンジニア育成とXR的なCEO@keisuke_cor

メニューを開く

他の方も書かれている通り、必要なindexを上手く張るしかないですね。ただレコード数が多くなるとRDBであれば限界があるのでpartiionを切るとか、Read-only専用でコラム型など別のタイプのDBを用意するとかですかね。

メニューを開く

ここ辺はやってると思うけど join 後 where の処理があるなら on に条件式書いた方が早くななります 結合してから絞る 絞ってから結合の簡単な理屈

のず(惡園←)@nz_onz

メニューを開く

一時TBにjoin対象にNo.振るようにインデックス貼って取得してから結合する。 捜査対象がnullの場合を考慮しないならleft joinしない。 とかでいけると思います。

togettyee@togettyee1

メニューを開く

データベースの設定?設計?が腐ってる可能性高いですね… うちの製品をお使いのお客様で、日次10TB/2500億件の処理してるケースがありますが、この規模まで行くならELTを諦めてETLにする必要がありますが。

れびぃ@空に浮かぶ空っぽの大伽藍@emptyskytemple

メニューを開く

インデックスを貼るは基本だけど後はどれくらいのデーターを使ってるかによる。 必要テーブルを全てインメモリに読み込む。 ワークの領域(例えばSQLServerだとtempdb)を可変ではなく固定にしこれもインメモリにする事も可能。 統計情報を手動更新するのも役立つ。

supernatural@g_snso

メニューを開く

まずどのDBを使ってるかにもよります。 単純にチューニングもやったうえでSQLの性能限界にきてるなら、いっそレコードを結合した状態で丸ごと分析用の別テーブルへ格納してしまう。データが変わるなら、更新されるようにトリガーなりバッチなりを組む。などでしょう。 一発で無理なら分けましょう。

まるま@marumaPM

メニューを開く

最近のSQLDBの動きを知らないので変なこと言っているかもしれませんが、単純な表の結合で1万レコードをjoinする場合は10,000x10,000で結合されて、その後selectされると思うので、一旦100,000,000行作ると考えると遅くなりそうですが。

Aru@早期退職したエンジニア@Aruaru0

人気ポスト

もっと見る
Yahoo!リアルタイム検索アプリ