2012年8月19日日曜日

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




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

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

その中で、サーバーに応じて、言語とDBMSが変わっだろうが

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

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

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

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

もちろん、ある程度のキャリアとなるWeb開発者にとっては、当然処理すべきところだが、

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

最初網の開発した時、開発者は、どの程度、ダミーデータを入れてテストをする。

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

一般的に、ダミーデータは、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 件のコメント:

コメントを投稿