- PR -

DataSetでの重複レコードについて

投稿者投稿内容
sarah
常連さん
会議室デビュー日: 2006/02/08
投稿数: 32
投稿日時: 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内で重複レコードを削除する方法はないでしょうか?
  宜しくお願いします。
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-06-29 17:14
DISTINCTが使えないならGROUP BYを使えば良いじゃない?
sarah
常連さん
会議室デビュー日: 2006/02/08
投稿数: 32
投稿日時: 2006-06-29 17:32
すいません。説明不足でしたので補足させて下さい。

distinct やgroup by を行うとSQLのパフォーマンスが非常に悪くなるため
それらを用いずに一度重複行を含むデータをDataSetに取得し、DataSetの
操作でそれらを圧縮できないかということです。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-06-29 17:57
VIEWを使うとか、INDEXを見直すとかの対策じゃだめなんですか?
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-29 18:06
引用:

sarahさんの書き込み (2006-06-29 17:32) より:
すいません。説明不足でしたので補足させて下さい。

distinct やgroup by を行うとSQLのパフォーマンスが非常に悪くなるため
それらを用いずに一度重複行を含むデータをDataSetに取得し、DataSetの
操作でそれらを圧縮できないかということです。


パフォーマンスが悪くなるとは一概にいえないとおもうけど?
下手したらDataSet側でどうこうするほうが悪いよ。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 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 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-06-29 19:01
引用:

distinct やgroup by を行うとSQLのパフォーマンスが非常に悪くなるため
それらを用いずに一度重複行を含むデータをDataSetに取得し、DataSetの
操作でそれらを圧縮できないかということです。


DataSet でグリグリやる方が「パフォーマンスが良い」という根拠が何かあったという事でしょうか?
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2006-06-29 19:12
1回DBから取得し終えたデータに対しての、再度の絞込みであれば、
DBにデータを再度取得するより、インメモリのDataSet(DataView)の
ほうが高速な場合はあると思いますが、

題意の場合、同じ結果を得るまでのプロセスですから、パフォーマンスが
早くなる見込みはないと考えます。

スキルアップ/キャリアアップ(JOB@IT)