ホームページ  >  記事  >  データベース  >  主要データベースにおけるセグメントクエリ技術の実装方法

主要データベースにおけるセグメントクエリ技術の実装方法

大家讲道理
大家讲道理オリジナル
2016-11-12 10:37:403348ブラウズ

データベースセグメント化クエリテクノロジーの実装


セグメント化クエリとは、データをクエリするときに、条件を満たすすべてのデータが一度にメモリに読み込まれるわけではないことを意味します。すべてのデータを一度にクエリすると、クエリの効率が低下し、クライアントへの応答に時間がかかります。つまり、セグメント化されたクエリでは、現在のページのサイズに応じて、各クエリの結果が各ページに表示される数値になります。クエリ効率が大幅に向上します

たとえば、データベースには 100,000 個のデータがあり、ページ番号をクリックすると、そのページ番号に表示する必要がある 20 個のコンテンツのみがクエリされます。 、他のページはクエリされません。つまり、毎回 20 個のデータのみがクエリされます。

SQL Server

Top キーワードを使用して、データベース テーブルの M 番目のレコードから始まる N レコードを取得します。 Select ステートメントの top と order by の両方である場合、並べ替えられた結果セットから選択されます:

SELECT *

FROM ( SELECT Top N *
FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2
Order by 主键 asc

たとえば、テーブル Sys_option から 10 レコードを取得するか 20 レコードを取得するか (主キーは sys_id です) )、ステートメントは次のとおりです:

SELECT *
FROM ( SELECT TOP 20 *
 FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2
Order by sys_id asc

Oralceデータベース

データベーステーブルのM番目のレコードから開始してNレコードを取得します

SELECT *
FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
where t2.r >= M

例えば、テーブルSys_option(主キー)から10レコードを取得するか20レコードを取得するか

SELECT *
FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
Where t2.R >= 10

MySQL データベース

私の SQL データベースは最も単純で、mysql の LIMIT 関数、LIMIT [offset,] rows を使用して、M レコードから始まる N レコードを取得するステートメントです。データベース テーブルは:

以下はコード スニペットです:

SELECT * FROM 表名称 LIMIT M,N

たとえば、テーブル Sys_option (主キーは sys_id) から、10 レコードから、または 20 レコードを取得するには、ステートメントは次のようになります:

以下はコードスニペットです:

select * from sys_option limit 10,20

以前 ORACLE を使用していたときは、効率とは関係なく、ROWNUM をページングの条件として使用していました。

では、ACCESS はどのようにページング機能を実装しているのでしょうか?いくつかの情報を読んだ後、これは少し複雑で、多くのコードを記述する必要があるため、SQL ステートメントである良い方法を思いつきました。

select top 15 * from YOURTABLE where ID not in (select top 15) 15 ID from YOURTABLE order by ID desc) order by ID desc

少し説明すると、15 はページあたりの行数、YOURTABLE はテーブル名、ID はテーブルの主キーフィールド (もちろん、を使用することもできます) other)、上記の SQL ステートメントは、2 ページ目 (2 番目の 15 レコード) を取り出すことです。ページ番号を変更したい場合は、次の 15 を対応する倍数に変更するだけです。

この方法と、ページング機能のないDataRepeaterプラグインを組み合わせて、メモ帳プログラムを3ストローク、5分割、2分割で書きました。笑わないでください。私は .NET を初めて使用するので、スキルを練習するために最初にこれを書きます。

ご興味のある方はメッセージを残していただければコードを投稿させていただきます。

注意してください:

最初の 15 レコードを取得する場合、SQL ステートメントを次のように記述することはできません:

  select top 15  *  from YOURTABLE where ID not in(select top 0 ID from YOURTABLE order by ID desc)  order by ID desc

このように記述すると、エラーが報告されます。直接記述します:

select top 15  *  from YOURTABLE   order by ID desc

制限を追加したい場合は、次のように記述できます:

select top 15  *  from YOURTABLE where ID not in(select top 15 ID from YOURTABLE where  NAME=&#39;wallimn&#39; order by ID desc) and NAME=&#39;wallimn&#39;  order by ID desc
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。