В которых случаях Oracle создаст индексы автоматически?

Насколько я знаю (эта страница), Oracle автоматически создает индекс для каждого УНИКАЛЬНОГО КЛЮЧА или объявления PRIMARY KEY. Действительно ли это - полный список случаев, когда индексы создаются автоматически в Oracle?

20
задан Tadeusz Kopec 28 January 2010 в 11:27
поделиться

5 ответов

Я постараюсь консолидировать данные ответы и сделать это вики-сообщество.
Поэтому для таких случаев Oracle автоматически создает индексы:

  1. APC: Для первичного и уникального ключей, если только такие индексы уже не существуют.
  2. APC: Для хранения LOB и XMLType.
  3. Гэри : Для таблицы с вложенной таблицей.
  4. Джим Хадсон: Для материализованного представления.
24
ответ дан 29 November 2019 в 23:27
поделиться

Во-первых, Oracle не всегда создает индекс, когда мы создаем основной или уникальный ключ. Если на этом столбце уже есть индекс, он будет использовать его вместо этого ...

SQL> create table t23 (id number not null)
  2  /

Table created.

SQL> create index my_manual_idx on t23 ( id )
  2  /

Index created.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX

SQL> 

... Обратите внимание, что my_manual_idx не является уникальным индексом; Это не имеет значения ...

SQL> alter table t23
  2      add constraint t23_pk primary key (id) using index
  3  /

Table altered.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX

SQL> drop index my_manual_idx
  2  /
drop index my_manual_idx
           *
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key


SQL> 

Есть еще один случай, когда Oracle автоматически создает индекс: lob Storage ....

SQL> alter table t23
  2      add txt clob
  3      lob (txt) store as basicfile t23_txt (tablespace users)
  4  /

Table altered.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$

SQL>

Редактировать

База данных обрабатывает xmltype То же самое, что и другие лоббировки ...

SQL> alter table t23
  2      add xmldoc xmltype
  3  /

Table altered.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SYS_IL0000556081C00004$$

SQL>    
18
ответ дан 29 November 2019 в 23:27
поделиться

Нет, мы приближаемся, но это еще не совсем полный список.

Также будет автоматически созданный индекс, когда вы создаете материализованный вид, поскольку Oracle должен иметь возможность быстро идентифицировать строки при быстром обновлении. Для материализованных представлений на основе ROWID он использует i_snap $ _tablename. Для основного ключа материализованные представления он использует исходное имя PK, измененное по мере необходимости, чтобы сделать его уникальным.

create materialized view testmv 
refresh force with rowid
as select * from dual;

select index_name from user_indexes where table_name = 'TESTMV';

Index Name
--------------
I_SNAP$_TESTMV
3
ответ дан 29 November 2019 в 23:27
поделиться

Это приведет к перехвату любого входного элемента, инициировавшего отправку:

$(document).ready(function() {
    var target = null;
    $('#form :input').focus(function() {
        target = this;
        alert(target);
    });
    $('#form').submit(function() {
        alert(target);
    });
});
-121--3515961-

Мы видели ту же проблему из C++ с использованием ADO. Несколько лет назад, после работы с Microsoft Support, мы также внедрили аналогичную логику повторных попыток в код и сбросили пул подключений, который разрешил проблему.

Если есть лучшее решение, люди в службе поддержки Майкрософт либо не знали об этом, либо не делились (в то время в любом случае).

-121--2282608-

Да, это полный список. Oracle автоматически создает индекс для каждого объявления UNIQUE или PRIMARY KEY.

0
ответ дан 29 November 2019 в 23:27
поделиться

И еще один, если вы создаете таблицу с вложенной таблицей, вы получаете индекс, созданный автоматически. Объектное хранилище в целом может сделать это, поскольку созданы скрытые таблицы.

Я думаю, что Xmltypes на основе схемы также сделает это.

2
ответ дан 29 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: