Насколько я знаю (эта страница), Oracle автоматически создает индекс для каждого УНИКАЛЬНОГО КЛЮЧА или объявления PRIMARY KEY. Действительно ли это - полный список случаев, когда индексы создаются автоматически в Oracle?
Я постараюсь консолидировать данные ответы и сделать это вики-сообщество.
Поэтому для таких случаев Oracle автоматически создает индексы:
Во-первых, 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>
Нет, мы приближаемся, но это еще не совсем полный список.
Также будет автоматически созданный индекс, когда вы создаете материализованный вид, поскольку 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
Это приведет к перехвату любого входного элемента, инициировавшего отправку:
$(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.
И еще один, если вы создаете таблицу с вложенной таблицей, вы получаете индекс, созданный автоматически. Объектное хранилище в целом может сделать это, поскольку созданы скрытые таблицы.
Я думаю, что Xmltypes на основе схемы также сделает это.