- PR -

SELECT文での検索結果、データ数が膨大な場合に表示件数を制御したい(dataGrid?)

1
投稿者投稿内容
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-11-19 11:43
.net、SQLどこに絡む項目か分からなかったのでお世話になっているInsider.NETに書込みさせていただきました。

内容としては、ホテルの部屋状況を検索すると考えて頂きたいです。一つのホテルには仮に100部屋あり、ホテル数が全国で1000件あればトータルで10万件の部屋数になります。ここから各部屋の状況を検索しようとします。
このとき検索条件としては「ホテル名」「空室/使用中」「地域」などと様々な検索条件で絞り込んでいきます。こうして、ピックアップされたデータが多くても100件程度のレベルまで落とし込まれます。この程度であれば問題ないのですが...。

私が開発/修正しているシステムでは、検索条件の絞込みをする際に、検索条件なしでも検索出来る仕様になっています。そのため、場合によては、10万件のデータを全て、DataGridに表示させるという場合が出てきてしまいます。

そのため、検索実行時に、データが出てこなくなります。
これが検索に時間がかかりすぎるためタイムアウトするのか、メモリが足りないのかなどと理由は不明ですが、とにかくデータを出す必要があります。

やり方としては、主キーでソートした検索結果を上位100件のみ表示させるようにして、検索条件を絞り込むように促すメッセージを出そうと考えています。

上記のことより
1.膨大なデータをDataGridで表示する場合に負荷がかかるのはどこになるのか?原因究明のヒントを頂きたいです。
2.検索結果のデータ数が膨大な場合に、上位100件で切ろうとした場合には、どこで脚きりをすべきか?
3.可能であれば脚きりの方法
4.DataGridで表示させる上限を決めることが出来るのか

について、教えていただければと思います。
技術的な問題ではなくプログラミングの問題かと思い、ここに書こうか迷いましたが、ここなら良い考えを拝借できるのではないかとおもい書き込みさせていただきました。
宜しくお願いします。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-11-19 12:01
ども、ほむらです。
DataGridでの使い方はわかりませんけど、上位??件というのは
SQLでも可能です。

ROWNUM()とか擬似列で検索してみてください。
Oracle8.0.1?以上とか最近のSQLServerなら使用できるはず。。

あとRecordSetのプロパティにPageSizeとか言うのがあったと思うので
利用できるかも知れません。。。
このあたり過去ログにあったような。。。。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2003-11-20 09:14
確かSQL Serverでは上位100件とかだと
SELECT TOP 100 * FROM テーブル とかでいきませんでしたっけ?
むらさめ
会議室デビュー日: 2003/06/20
投稿数: 8
投稿日時: 2003-11-20 09:24
どうも 

私の行っている開発でも同じようなことがあり
SQLのTOPN関数を使用して対応しました。
(SQLServer2000ですが)
この時100件で制限するのであれば 
 SELECT TOP 101 * FROM XXX
としてデータを取得し、モジュールで101件の時に
メッセージを表示するようにしました
(101件目は表示しない)

こんな感じです。

1

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