- - PR -
DataSetでの重複レコードについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-29 17:00
お疲れ様です。
SQLで select distinct A.id, A.name from table A とするところを、distinctを用いずに select A.id, A.name from table A として取得し、DataSet内で重複レコードを削除する方法はないでしょうか? 宜しくお願いします。 | ||||
|
投稿日時: 2006-06-29 17:14
DISTINCTが使えないならGROUP BYを使えば良いじゃない?
| ||||
|
投稿日時: 2006-06-29 17:32
すいません。説明不足でしたので補足させて下さい。
distinct やgroup by を行うとSQLのパフォーマンスが非常に悪くなるため それらを用いずに一度重複行を含むデータをDataSetに取得し、DataSetの 操作でそれらを圧縮できないかということです。 | ||||
|
投稿日時: 2006-06-29 17:57
VIEWを使うとか、INDEXを見直すとかの対策じゃだめなんですか?
| ||||
|
投稿日時: 2006-06-29 18:06
パフォーマンスが悪くなるとは一概にいえないとおもうけど? 下手したらDataSet側でどうこうするほうが悪いよ。 | ||||
|
投稿日時: 2006-06-29 18:28
DataSet に格納したものから重複を外すというのは、速くならないように思います。
distinct が遅いという時点で大量のレコードを扱っているのだと思います。 その大量なデータを全て DataSet に格納する処理や、その大量のデータの重複を検証する処理を考えると、単に distinct や group by を使う方が効率が良い気がします。 ぼのぼのさんも言ってますが、A.id がインデックスになっていなければ、インデックスにしてみるとか、A.id と A.name が対応しているものであるなら、A.id を Unique した結果に、A.name を結合してみるとか試してみると良いかも知れませんね。 [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-06-29 18:30 ] | ||||
|
投稿日時: 2006-06-29 19:01
DataSet でグリグリやる方が「パフォーマンスが良い」という根拠が何かあったという事でしょうか? | ||||
|
投稿日時: 2006-06-29 19:12
1回DBから取得し終えたデータに対しての、再度の絞込みであれば、
DBにデータを再度取得するより、インメモリのDataSet(DataView)の ほうが高速な場合はあると思いますが、 題意の場合、同じ結果を得るまでのプロセスですから、パフォーマンスが 早くなる見込みはないと考えます。 |