アプリケーション:asp.net
言語:vb.net
データベース:oracle
二つ質問があります。1つ目は
上記の環境で開発する時に、
オラクルテーブルの大量レコードを
1ページ50行の一覧としてaspx上に表示する場合
以下のどちらで実装していますか?
もしくはもっと良い実装方法がありますか?
◆検索ボタンを押すと抽出条件で指定したレコードを
全件取得。ページ遷移する時はそのデータを使用して
再度検索ボタンを押されるまでselectしない。
◆検索ボタンを押すと抽出条件で指定したレコードの
1行目~50行目を取得。ページ遷移する時は
再度selectしてそのページ部分のみ取得。
(例:rownumをbetweenなど)
2つ目の質問は、後者のページ単位でselectする場合
静的(検索ボタンを押すまでずっとselect結果が変わらない)な表示にしていますか?
動的(※)な表示にしていますか?
※極端な例ですが、1ページ目を表示している間に
誰かが1ページの1行目より並び順が前にくる
レコードを50件入れると、
2ページ目に遷移した時、ユーザから見ると
ページ遷移していない様に錯覚するなど
前者の一括取り込みで作った所、開発中は件数が少なかったので
問題なかったのですが、いざ本番に近い件数(十数万件)で
テストした所、非常に遅くなってしまいました。
そのため、後者のページ単位にしようかと考えているのですが
どう実装すべきかで悩んでいます。
もし宜しければ皆さんがどの様に実装しているか
教えてください。
なお、sql自体はインデックスが効いていない等と
いう事はありませんでした。
以下実装しているソースのサンプルですが、
「Do While reader.Read()」で遅くなっています。
(本来は処理がありますが、負荷確認の為にコメントアウトしました)
「read件数がxx件以上になるとexit do」で対処すると遅くなりませんでした。
Dim command As SqlCommand = New SqlCommand( _ "SELECT CategoryID, CategoryName FROM Categories;", _ connection) connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() If reader.HasRows Then Do While reader.Read() Loop End If reader.Close() connection.close()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/21 13:09