![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になっております。SQLSERVER初心者です。
NULLを含む列COL1を検索条件に入れる場合、
パフォーマンスの観点から
WHERE COL1 IS NULL とするのではなく
WHERE ISNULL(COL1,'') = '' とするよう有識者から言われました。
そこで質問なのですが、
(1)IS NULL は基本的に上記のように変換したほうが早くなるのですか?
(2)COL1にもしインデックスが設定されていたとしても、上記の場合だとどちらも効かないですよね?
詳しい方おしえてください。
よろしくおねがいします。
No.3ベストアンサー
- 回答日時:
試しにこちらの適当なテーブルに索引をつけて検索してみました。
(1)WHERE COL1 IS NULL
INDEX SEEKになりました
(2)WHERE ISNULL(COL1,'') = ''
INDEX SCANになりました
INDEX SEEKなので(1)の方が効率がよさそうです。
ManagementStudioでSQL実行時に「実際の実行プランを含める」のオプションつきで実行してみてください。
でも、(2)は長さ0の空文字も対象にするから(1)と(2)は結果が変りますよね。このことを考慮してますか?
※長さ0の文字列とNULLを区別するかどうかはDBによって異なります。
この回答への補足
あ
すいません表示されました。
GUIで非常に見やすいですね。
読み方も徐々に勉強していきたいと思います。
ありがとうございました。
ありがとうございます。
なるほど(1)の方がはやそうですね。実際のsqlにもあてはめてみます。
>ManagementStudioでSQL実行時に「実際の実行プランを含める」のオプションつきで実行してみてください。
オプションつけたのですが、
実行プランのウィンドウが表示されません。。
よく分かりません、、(泣)
ありがとうございました。
No.2
- 回答日時:
そのアドバイスはかなり疑問だと思います。
・そもそもNULL値を検索するということは、その列はNULL値が認められているということです。
SQL Serverでは、(Oracleとは違い)NULLと空文字は別扱いですから、データに空文字とNULLの両方が含まれる場合、2つの条件の結果は異なります。
・Col1にインデックスがない場合、Col1 IS NULLとISNULL(Col1,'')=''のコストは殆ど変わりません。
どちらにしても主キーに対するフルスキャンが選択されるためです。
・Col1にインデックスがある場合、
Col1 IS NULLとした場合もそれだけではインデックスを使わない可能性がありますが、Col1 IS NULL OR Col1=''とした場合、インデックスを選択する可能性が高くなります
検索キーに関数を被せてしまうとSARG(Search Argument)ではなくなるため、オプティマイザがいかなる状況でもそのインデックスを選択しなくなります。
コストとパフォーマンスがダイレクトに同じだとはいいませんが、インデックスを使った場合のコストはフルスキャン時の数分の一以下になります。
ありがとうございます。
非常に詳しい解説をいただき助かりました。
>検索キーに関数を被せてしまうと・・・
やはりこの点はoracleなどと同じみたいです。
>2つの条件の結果は異なります。
結果が異なる点は認識しています。
仕様上問題ないことは確認取れてます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Excel(エクセル) Excel 、この式はどのように解釈すればいいのでしょうか 4 2023/02/03 08:53
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
ビューで引数を使いたい
SQL Server
-
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
-
4
SELECT 文 GROUP での1件目を取得
SQL Server
-
5
日付の大小の表現
日本語
-
6
datetime型でNULL値を入れたい。
SQL Server
-
7
ストアドプロシージャ_カーソルのヒット件数
その他(データベース)
-
8
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
9
含まない言い方ってどうしたらいいんでしょうか
日本語
-
10
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
11
他のデータベースとのテーブル結合
SQL Server
-
12
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
13
sqlserverにはグループ集計のfirstとlastがありません??
SQL Server
-
14
SQLServer sqlcmdが使えない
SQL Server
-
15
SQLServerのselect文でデータ数1万くらいのDBから
SQL Server
-
16
SQLでスキーマ名(所有者名)の修飾無しでテーブル参照したい
SQL Server
-
17
処理件数を非表示にしたい
SQL Server
-
18
DBの定義のサイズを大きくし過ぎると問題ある?
その他(データベース)
-
19
同じSQL文で極端に検索が遅くなる時がある
MySQL
-
20
キャッシュを使わずにSELECTを投げたい
Oracle
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[ BETWEEN ] vs [ >= AND <= ]
-
主キーにインデックスは貼らな...
-
ビューにインデックスを設定で...
-
コクヨ タイトルブレーンでイ...
-
サーバ負荷を抑える大量データ...
-
年と月が別カラムの場合のSQL
-
コマンドプロンプト エラー
-
インデックスに活字で打ちたい...
-
サイトがいつまでたってもGoogl...
-
ホームページ内検索の作り方
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESS 一番最新の日付の金額...
-
2つのテーブルから条件に一致...
-
3つ以上のテーブルをUNIONする...
-
エクスポート時の改行コードに...
-
SELECT時の行ロックの必要性に...
-
Accessにインポートしたら並び...
-
accessテーブル作成クエリを実...
-
sqlserverで集計結果をUPDATEし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[ BETWEEN ] vs [ >= AND <= ]
-
主キーにインデックスは貼らな...
-
mysql IN句に1データだけ指定...
-
インデックスの再構築の意味っ...
-
【SQLServer】IS NULLのパフォ...
-
ビューにインデックスを設定で...
-
テキスト項目255ケタのメリット...
-
コクヨ タイトルブレーンでイ...
-
『ラミネートインデックスシー...
-
インデックスがすぐに壊れます…
-
ホームページがGOOGLEにインデ...
-
indexの使用頻度を調べる方法
-
年と月が別カラムの場合のSQL
-
サーバ負荷を抑える大量データ...
-
2つのインデックスと複合インデ...
-
MySQLとSQLServerの性能の違い...
-
インデックスが無効になっている
-
サイトがいつまでたってもGoogl...
-
ホームぺージを作ったのですがg...
-
主キーとインデックスの違いに...
おすすめ情報