1. 概要
「DB」側にデータの存在をチェックしに行って、データの有無でプログラム側の処理を切り分ける場合。
既存のクエリ次第では高速化できる場合があります。
(参考サイトまんま、うけうり)
本ページは、下記のサイトを参考にさせていただきました。
「SQL 小ネタ: 高速なデータの存在チェック #MySQL」
「SQLServer の TOP MySQL、PostgreSQL ではLIMIT、OFFSET」
2. TOP
「SQLServer」では、「TOP」という句が使えるらしい。
「SQLServer」の環境は、持っていないし、持ちたくもないので、参考サイトまんま書きますが。
SELECT COUNT(*) FROM SOMETABLE WHERE COLUMN1 = 1;
という「SQL」の結果をプログラムで(「python」風に書くならば)。
if COUNT結果 > 0:
結果がある場合の処理
else:
結果がない場合の処理
と書くよりも、「SQL」を。
SELECT TOP (1) * FROM SOMETABLE WHERE COLUMN1 = 1;
としてプログラムで。
if レコードがとれた:
結果がある場合の処理
else:
結果がない場合の処理
とする方が、100msec、場合によっては 1 sec 単位で結果が異なるらしい。
この「TOP」は、「MySQL」「PostgreSQL」では使えないので、「LIMIT」を使うとよいそうで。
「MySQL」「PostgreSQL」で、構文が異なるそうなので、それぞれやってみます。
3. MySQL LIMIT
「MySQL」では。
SELECT カラム FROM テーブル名 LIMIT オフセット, 行数;
で、行数を絞ることができます。
やってみます。
SELECT * FROM WP_COMMENTS LIMIT 0, 1;
取得しているのは、「WordPress」のコメントテーブルです。
結果は、下記のようになりました(行の先頭部分のみ)。
+------------+--
| comment_ID |
| 4 |
+------------+--
4. PostgreSQL LIMIT
「PostgreSQL」では。
select カラム from テーブル名 limit 行数 offset オフセット;
で、行数を絞ることができます。
やってみます。
select * from mantis_bug_table limit 1 offset 0;
取得しているのは、「MANTIS」のテーブルです。
結果は、下記のようになりました(行の先頭部分のみ)。
id | project_id |
16 | 2 |