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

Oracle 10以降でNULLを含む列で関数ベースの索引を使用するにはどうすればよいですか?

    インデックスは使用できますが、オプティマイザーが特定の例では使用しないことを選択した可能性があります。

    SQL> create table my_objects
      2  as select object_id, object_name
      3  from all_objects;
    
    Table created.
    
    SQL> select count(*) from my_objects;
      2  /
    
      COUNT(*)
    ----------
         83783
    
    
    SQL> alter table my_objects modify object_name null;
    
    Table altered.
    
    SQL> update my_objects
      2  set object_name=null
      3  where object_name like 'T%';
    
    1305 rows updated.
    
    SQL> create index my_objects_name on my_objects (lower(object_name));
    
    Index created.
    
    SQL> set autotrace traceonly
    
    SQL> select * from my_objects
      2  where lower(object_name) like 'emp%';
    
    29 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    
    ------------------------------------------------------------------------------------
    | Id  | Operation                   | Name            | Rows  | Bytes | Cost (%CPU)|
    ------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |                 |    17 |   510 |   355   (1)|
    |   1 |  TABLE ACCESS BY INDEX ROWID| MY_OBJECTS      |    17 |   510 |   355   (1)|
    |*  2 |   INDEX RANGE SCAN          | MY_OBJECTS_NAME |   671 |       |     6   (0)|
    ------------------------------------------------------------------------------------
    

    あなたが読んだドキュメントは、おそらく他のインデックスと同じように、すべてnullのキーがインデックスに保存されていないことを指摘していました。



    1. 同一のプロパティを持つタイムゾーン名は、タイムスタンプに適用すると異なる結果になります

    2. 関連する行を単一の行に変換するOracleSQL

    3. 別のテーブルから1つの値を持つデータMysqlを挿入する

    4. 警告:session_start():セッションCookieを送信できません-ヘッダーはすでに送信されています(出力はで開始されました