sql >> データベース >  >> RDS >> Mysql

IsNotNullとNotIsNullの違いは何ですか

    違いはありません。

    すべての主要なエンジン(つまり、MySQLSQL ServerOracle およびPostgreSQL )解析段階でこれらの述語をマージし、それらから同一の計画を作成します。

    これらの条件の処理は、演算子を1つまたは別の順序で適用するよりも複雑です。

    たとえば、OracleIS NOT NULL (またはNOT IS NULL )条件は、インデックスを使用する可能性を意味するため、次のようなクエリ:

    SELECT  column
    FROM    mytable
    WHERE   column IS NOT NULL
    

    ほとんどの場合、index fast full scanで実行されます 、実行時に追加のチェックが行われない(NULL以降) 値はインデックスに含まれないため、チェックする必要はありません。

    各レコードをチェックする必要がある場合でも、チェックの順序はオプティマイザーによって定義されます(WHEREに表示される述語と演算子の順序ではありません)。 条項)。

    たとえば、Oracleの計画は次のとおりです。 クエリ:

    SQL> EXPLAIN PLAN FOR
      2  
      2  SELECT *
      3  FROM   t_test
      4  WHERE  NOT column IS NULL
      5  /
    
    Explained
    
    SQL> SELECT  *
      2  FROM    TABLE(DBMS_XPLAN.display())
      3  /
    
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    Plan hash value: 958699830
    ----------------------------------------------------------------------------
    | Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
    ----------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |        |    30 |  1260 |     3   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| T_TEST |    30 |  1260 |     3   (0)| 00:00:01 |
    ----------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
       1 - filter("COLUMN" IS NOT NULL)
    

    ご覧のとおり、filter 内部でIS NOT NULLに変換されました (Oracle ほとんどのコメント投稿者と一緒に、より適切な形式であると信じているようです)

    更新:

    Jonathan Lefflerが指摘したように、これらはタプルを評価するときの違いです(単一の列ではありません)。

    混合NULLで構成されるタプル および非NULL 値はNULLでもありません また、NOT NULL

    PostgreSQLで (タプルに対するこの述語をサポートします)、これらの表現は両方とも:

    SELECT  (1, NULL) IS NULL
    SELECT  (1, NULL) IS NOT NULL
    

    falseと評価します。



    1. MySQLがnull/emptyを返すかどうかを確認するにはどうすればよいですか?

    2. .NET MySqlCommandでMySqlユーザー定義変数を使用することは可能ですか?

    3. 外部キー-それらは私のために何をしますか?

    4. MySQLJOINとLEFTJOINの違い