2012年9月7日金曜日

SQL Server(MSSQL)ページング技法




今日、私たちは様々なITの進化の中で、その中で最も大きな発展を遂げた分野を挙げてみると

Webプログラミングを挙げることができるだろう。

その中のサーバーに応じて、言語とDBMSがガリだろうが

Linux(Oracle、Java OR Mysql、PHP)、Windows(SQL Server、。net)などがある。

多くのWeb開発者が、Web開発においては、優れた技術を保有しているが

データベースアクセスにおいては、排除している(あるいはよく知らない)部分がたくさんある。

その中の一つが、今から説明するページング技法である。

もちろん、ある程度のキャリアがされているウェブ開発者にとっては当然処理しなければならな部分ですが、

初級開発者や* DBに関心がない開発者は、柔軟な処理が出来ない部分である。

初めてのWebを開発したとき、開発者はどの程度、ダミーデータを入れてテストをする。

しかし、そのダミーデータの量に応じて、後でサーバーに大きな負荷を与えることができる。

一般的に、ダミーデータは10万件以上(現在のインターネットはますます発展しており、

ウェブサイトの訪問者の量にもよりますが掲示板だけ見ても、10万件を超えるデータがたまる

サーバーはかなり多い)のデータを使用する方が良い。

もし1〜200件、ダミーデータを入れてテストして "あ〜よくなる"と考えて折り畳みなら

トイレで用を足して後始末をしなくて出る人とまったく同じ場合たてすることができる。

これから簡単にページング技法について調べてみよう

1。 NOT IN(TOP)

SELECT TOPページサイズ*
FROM table_name
WHERE id NOT IN

SELECT TOP(ページ-1)*ページリストサイズid
FROM table_name


2。 ROW_NUMBER

SELECT *
FROM

SELECT ROWNUMBER()OVER(ORDER BY id DESC)rnum、*
FROM table_name)
)A
WHERE rnum BETWEEN(ページサイズ*ページリストサイズ)+ 1 AND(ページサイズ*ページリストサイズ)+(ページサイズ+ 1)

3。 DECLAREを使用

DECLARE @ id int

SELECT TOP(ページサイズ*リストサイズ+ 1)id
FROM table_name

SELECT TOPページサイズ*
FROM table_name
WHERE id> @ id

4。 TOP TOP

SELECT TOPページサイズ*
FROM

SELECT TOP(ページサイズ*ページリストサイズ+ 1)*
FROM table_name)
)A

上記のクエリは、ソート部分は排除したクエリです。

もちろんidはインデックスもしくはPKのカラムです

どの方法を使うかは、個々の部分が、個人的には3番と4番をお勧めします。



なぜページングを使用する必要がか?

もしデータが10万件があるとしたページごとに30件のデータを示しているとしよう

実際にクライアント(ユーザー)に示すデータは、わずか30件に過ぎなかったのに

ページング処理でデータを共有しなければ10万件を毎回フルスキャンする非常に不幸な

結果を招くだろう。

0 件のコメント:

コメントを投稿