LoginSignup
36
26

More than 5 years have passed since last update.

SQL小ネタ: 高速なデータの存在チェック

Last updated at Posted at 2016-12-08

DB側にデータの存在をチェックしに行って、データの有無でプログラム側の処理を切り分ける場合、既存のクエリ次第では高速化できる場合があります。

    -- DB側
    SELECT COUNT(*) FROM SomeTable WHERE Column1 = 1

    -- プログラム側
    IF COUNT結果 > 0 THEN
        結果がある場合の処理
    ELSE
        結果がない場合の処理
    END

↑ このように、COUNT()で該当レコードの件数を取得し、1件以上とれるかどうかで処理を分けているような場合です。データの存在だけチェックすればいいのにCOUNT(*)と、全レコード数をカウントするのはもったいないですよね。

そこで、↓のようにTOP句をつけて、最大でも1件しか返さないようにクエリを書き換えます。

    -- DB側(※SQLServer)
    SELECT TOP (1) * FROM SomeTable WHERE Column1 = 1

    -- プログラム側
    IF Recordとれた? THEN
        結果がある場合の処理
    ELSE
        結果がない場合の処理
    END

たったこれだけでも、クエリによっては100ミリ秒~下手すると1秒単位で速度に差が出る場合があります。
小ネタですが、効果的なケースもあるはず・・!

36
26
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
26