ページング技術とは
ページングは、ユーザーが毎回見るのはすべてのデータではなく、その中に自習したい内容が見つからない場合に、すべてのデータをセグメントに分けて表示する技術です。ページ番号を設定したり、必要なコンテンツが見つかるまでページをめくって表示コンテンツを変換したりすることもできます。実際、これは本を読むときとよく似ています。
次のページでは、2 つの一般的なページング方法を示します:
ページネーションの意味
ページングは確かに効果的ですが、システムの複雑さは確実に増加します。しかし、データ量が少ない場合はもちろん回避できますが、企業情報システムの場合、データ量は制限されません。特定のテーブルからの All Select * を無視して、クライアントが何千もの膨大なテーブル形式のデータを許容できるとしても、ネットワークが混雑してストレスがかかります。サーバーは依然として無言の抗議を提示し、場合によっては完全なストライキで終わることもあります。この結末は、古代の暴君と彼の耐え難い臣下の物語に少し似ています。
プログラマは暴君ではありません。ほとんどの企業情報システムが 3 層またはそれ以上の層のアーキテクチャを持っているという事実を考慮すると、プログラマはデータを表示するときにページングの形式を採用する必要があります。顧客 . クレームが殺到したり、夜中に電話で起こされたりしたくないなら。
リクエストの開始からデータの返却までの全プロセス
ページネーションを行う決心がついたので、コードを記述する前に、典型的な 3 層アーキテクチャでは、リクエストの開始からデータを返すまでのプロセス全体が次のとおりであることを思い出してください。
ページネーションする場所
上の図から、SQL ステートメントが処理された後、データベース、Web アプリケーション、およびブラウザーがすべてページングを実行できることがわかります。では、ページングを実行するのに最適な場所はどこでしょうか?
判断基準は速度です。当然のことですが、データベース サーバー、Web アプリケーション サーバー、クライアントの間にはネットワークがあり、そのネットワークで送信されるデータ量が少ないほど、データベースの応答は速くなります。サーバーと Web 一般に、アプリケーション サーバーの処理能力はクライアントの処理能力よりもはるかに強力です。これら 2 つの点から、クライアントでのページングの解決策は最も望ましくありません。
次に、残された方法は Web サーバー側でのページングとデータベース側でのページングの 2 つだけです。Web サーバー側でのページングを選択した場合でも、フィルタリングされたデータのほとんどは Web アプリケーション サーバーに送信されます。データベース側で直接ページングを実行するほど良くはありません。
したがって、より良いページング方法は、ページをめくるたびにデータベースからページ サイズのデータ ブロックのみを取得することです。このように、ページをめくるたびにデータベースにクエリを実行する必要がありますが、接続プールを使用する場合、クエリされるレコードの数は非常に少なく、ネットワーク上で送信されるデータ量はそれほど多くありません。 -データベース接続を確立するための消費プロセスをスキップできます。データベース側では、クエリ速度を向上させるために使用されるさまざまな成熟した最適化テクノロジがあり、アプリケーション サーバー層でのキャッシュよりもはるかに効果的です。
SQL ステートメントのページング
(1) MySql の Limit m,n ステートメント
Limit の後の 2 つのパラメーターのうち、パラメーター m は 0 から始まる開始インデックスです。パラメーター n は返されるレコードの数です。ページングが必要な場合は、これら 2 つの値を指定するだけです
(2) Oracle データベースの行番号
Oracle データベースでは、ページング方法は MySql ほど単純ではなく、それを実現するには rownum に依存する必要があります。
Rownum はレコードの行番号を表します。したがって、ページング データを取得するために rownum の範囲を指定する場合は、クエリ ステートメントのレイヤーでは実行できません。ページングを行うには、再度クエリを実行する必要があります。
リーリー
其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。
精彩专题分享:
SQL Server分页技术总结:http://www.bitsCN.com/Special/604.htm
ASP.NET分页功能操作:http://www.bitsCN.com/Special/149.htm
javascript分页功能操作:http://www.bitsCN.com/Special/469.htm
jquery分页功能操作:http://www.bitsCN.com/Special/465.htm
php分页功能操作:http://www.bitsCN.com/Special/236.htm
其实分页技术还有很多其它技术,比如:Struts、hibernate等等都可实现。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。