Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Какое индексное сканирование будет использоваться в простом примере ?  [new]
JJZ
Member

Откуда:
Сообщений: 93
Коллеги, есть следующая задача:

Examine the Exhibit1 to view the structure of an indexes for the EMPLOYEES table.

SQL> desc employees
Name Null? Type
EMPLOYEE ID NOT NULL NUMBER (6)
FIRST NAME VARCHAR 2(20)
LAST NAME NOT NULL VARCHAR 2(25)
EMAIL NOT NULL VARCHAR 2(25)
PHONE NUMBER VARCHAR 2(20)
HIRE DATE NOT NULL DATE
JOB ID NOT NULL VARCHAR 2(10)
SALARY NUMBER (8, 2)
COMISSION PCT NUMBER (2,2)
MANAGER ID NUMBER (6)
DEPARTMENT ID NUMBER (4)

SQL> select index_name, index_type from user_indexes where table_name = ‘EMPLOYEES’
EMP_NAME_IX NORMAL
EMP_MANAGER_IX NORMAL
EMP_JOB_IX NORMAL
EMP_DEPARTMENT_IX NORMAL
EMP_EMP_ID_PK NORMAL
EMP_EMAIL_UK NORMAL
Examine the query:

SQL> SELECT * FROM employees WHERE employee_id IN (7876, 7900, 7902);
EMPLOYEE_ID is a primary key in the EMPLOYEES table that has 50000 rows.

Вопрос: Which statement is true regarding the execution of the query?

A. The query uses an index skip scan on the EMP_EMP_ID_PK index to fetch the rows

B. The query uses the INLIST ITERATOR operator to iterate over the enumerated value list and values are evaluated using an Index range scan on the EMP_EMP_ID_PK index.

C. The query uses the INLIST ITERATOR operator to iterate over the enumerated value list and values are evaluated using a fast full index scan on the EMP_EMP_ID_PK index.

D. The query uses the INLIST ITERATOR operator to iterate over the enumerated value list and values are evaluated using an index unique scan on the EMP_EMP_ID_PK index.

E. The query uses a fast full index scan on the EMP_EMP_ID_PK index fetch the rows.


У кого есть какие варианты ответа.
Я думаю, что ответ D - будет использоваться index unique scan.
Т.к. выражение employees_id IN (7876, 7900, 7902) преобразуется в employees_id = 7876 OR employees_id = 7900 OR employees_id = 7902.
Согласно http://docs.oracle.com/cd/E16655_01/server.121/e15858/tgsql_optop.htm#TGSQL94669

The database performs a unique scan when the following conditions apply:
A query predicate references all of the columns in a unique index key using an equality operator, such as WHERE prod_id=10.
A SQL statement contains an equality predicate on a column referenced in an index that was created with the CREATE UNIQUE INDEX statement.
Эти условия выполняются следовательно ответ D.

Есть у коллег еще другие мнения ?
15 авг 13, 13:52    [14713035]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
-=APS=-
Member

Откуда: Киев
Сообщений: 737
Чисто из любопытства: вы обычно все вопросы из тестов на форум выкладываете с предложением поделиться мыслями или все-таки некоторые оставляете при себе?
15 авг 13, 14:04    [14713137]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Джордж Джордович Куст
Guest
А чё сам проверить боишся. Можно легко организовать фулскан там, например.
15 авг 13, 14:05    [14713150]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
JJZ
Member

Откуда:
Сообщений: 93
-=APS=-
Чисто из любопытства: вы обычно все вопросы из тестов на форум выкладываете с предложением поделиться мыслями или все-таки некоторые оставляете при себе?


Это вопросы из demo дампа TestKing: http://www.test-king.com/exams/1z0-117.htm

Я скачал. но со многими ответами из TestKing не согласен, поэтому решил спросить у профессионалов.
У TestKing по данному вопросу ответ:
B. The query uses the INLIST ITERATOR operator to iterate over the enumerated value list and values are evaluated using an Index range scan on the EMP_EMP_ID_PK index.

Я с ними не согласен, проверил на 107 записях - делает INDEX UNIQUE SCAN.
Руки не дошли сгенерировать 50000 записей.

Есть у кого-нибудь мнения по поводу данного вопроса.
15 авг 13, 14:55    [14713466]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
JJZ,

Я с ними не согласен, проверил на 107 записях - делает INDEX UNIQUE SCAN.
Руки не дошли сгенерировать 50000 записей.

а вы что руками вбивали 107?
15 авг 13, 15:05    [14713521]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
oracle_newcomer
Member

Откуда:
Сообщений: 17
comphead
JJZ,

Я с ними не согласен, проверил на 107 записях - делает INDEX UNIQUE SCAN.
Руки не дошли сгенерировать 50000 записей.

а вы что руками вбивали 107?


У меня тоже INDEX UNIQUE SCAN на 50000 записей.
15 авг 13, 15:09    [14713565]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
-=APS=-
Member

Откуда: Киев
Сообщений: 737
Ну, что любопытно - формально, в задаче нет информации об уникальности индекса по EMPLOYEE_ID.
Подозреваю, что они должны были в запросе к user_indexes показать еще и UNIQUENESS.
В вашей ссылке на доку есть рассмотрение примера range scan при условии pk = value.
15 авг 13, 15:20    [14713667]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
-=APS=-
Ну, что любопытно - формально, в задаче нет информации об уникальности индекса по EMPLOYEE_ID.
Подозреваю, что они должны были в запросе к user_indexes показать еще и UNIQUENESS.
В вашей ссылке на доку есть рассмотрение примера range scan при условии pk = value.

А это что?
EMPLOYEE_ID is a primary key in the EMPLOYEES table that has 50000 rows.
15 авг 13, 15:22    [14713676]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
-=APS=-
Member

Откуда: Киев
Сообщений: 737
автор
А это что?
EMPLOYEE_ID is a primary key in the EMPLOYEES table that has 50000 rows.
Загляните по ссылке, приведенной топикстартером в первом сообщении, и в п.6.3.2.1 взгляните на пример.
15 авг 13, 15:27    [14713700]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
-=APS=-,

Как оно вообще не ругнулось не пойму при создание ПК на поле с обычным индексом, или хотя бы пересоздало его на уникальный индекс.
15 авг 13, 15:50    [14713892]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
кецкцукцку
Guest
-=APS=- и Gustly
два клоуна нашли друг друга
15 авг 13, 15:55    [14713935]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Красавица Икуку
Guest
кецкцукцку
-=APS=- и Gustly
два клоуна нашли друг друга

-=APS=- все правильно сказал. Ещё и напомнил всем и тебе в частности, что сканирование индекса primary key даже в случае = может быть range scan'ом.
15 авг 13, 16:03    [14714007]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
Красавица Икуку,

Как может быть уникальный скан, если нету уникального индекса?
15 авг 13, 16:07    [14714032]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Красавица Икуку
Guest
Gustly
Красавица Икуку,

Как может быть уникальный скан, если нету уникального индекса?
О каком уникальном скане речь и где нет уникального индекса?
15 авг 13, 16:09    [14714050]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
Красавица Икуку
Gustly
Красавица Икуку,

Как может быть уникальный скан, если нету уникального индекса?
О каком уникальном скане речь и где нет уникального индекса?

http://docs.oracle.com/cd/E16655_01/server.121/e15858/tgsql_optop.htm#TGSQL94669
Пример, что даже при ПК может быть рэнж скан.
И там же идет скрипт для таблицы, при котором есть ПК, но нету уникального индекса.
15 авг 13, 16:11    [14714069]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Красавица Икуку
Guest
Gustly
Красавица Икуку
пропущено...
О каком уникальном скане речь и где нет уникального индекса?

http://docs.oracle.com/cd/E16655_01/server.121/e15858/tgsql_optop.htm#TGSQL94669
Пример, что даже при ПК может быть рэнж скан.
И там же идет скрипт для таблицы, при котором есть ПК, но нету уникального индекса.
Потому что уникальность скана зависит от уникальности индекса. В указанном примере индекс обычный, а уникальность может обечпечивается и на нём.
15 авг 13, 16:13    [14714082]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
Красавица Икуку
уникальность может обечпечивается и на нём.

Это можно как-нибудь отследить кроме как через "ORA-02429: нельзя удалить индекс, использованный для реализации уникальн./первичн. ключа" ?
15 авг 13, 16:21    [14714145]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Красавица Икуку
Guest
Gustly
Красавица Икуку
уникальность может обечпечивается и на нём.

Это можно как-нибудь отследить кроме как через "ORA-02429: нельзя удалить индекс, использованный для реализации уникальн./первичн. ключа" ?
В dba_indexes всё есть.
15 авг 13, 16:26    [14714180]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
-=APS=-
Member

Откуда: Киев
Сообщений: 737
В любом случае, для теста это вопрос из серии "с заковыкой" (а, учитывая не полную информацию, можно даже назвать "подленьким").
Это все равно, что предложить вычислить 1+1, умолчав о том, что будет использоваться двоичная система.. :(
-
ЗЫ. Или нам топикстартер задачку показал не полностью :)
15 авг 13, 16:29    [14714211]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Gustly
Это можно как-нибудь отследить кроме как через "ORA-02429: нельзя удалить индекс, использованный для реализации уникальн./первичн. ключа" ?


А проверить USER/ALL/DBA_INDEXES.UNIQUENESS религия не позволяет?

SY.
15 авг 13, 16:29    [14714214]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
Красавица Икуку
В dba_indexes всё есть.

Меня только привлекло поле UNIQUENESS и оно NONUNIQUE, или есть еще какие-то?
15 авг 13, 16:29    [14714216]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
oracle_newcomer
Member

Откуда:
Сообщений: 17
а я скажу спасибо топик пастеру
любопытный пример
готов с тобой вместе обсуждать примеры
пиши еще
15 авг 13, 17:02    [14714478]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Clipsya
Member

Откуда: Moscow
Сообщений: 83
Gustly
Красавица Икуку
В dba_indexes всё есть.

Меня только привлекло поле UNIQUENESS и оно NONUNIQUE, или есть еще какие-то?


ALL_CONSTRAINTS поля INDEX_NAME и CONSTRAINT_TYPE
15 авг 13, 17:14    [14714548]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
А что там сказано насчёт актуальности статистики?
15 авг 13, 17:16    [14714561]     Ответить | Цитировать Сообщить модератору
 Re: Какое индексное сканирование будет использоваться в простом примере ?  [new]
Gustly
Member

Откуда:
Сообщений: 1426
Clipsya
Gustly
пропущено...

Меня только привлекло поле UNIQUENESS и оно NONUNIQUE, или есть еще какие-то?


ALL_CONSTRAINTS поля INDEX_NAME и CONSTRAINT_TYPE

Тип у обоих индексов = 'P'. Но в голове не укладывается, как он может использоваться обычный индекс для ограничения уникальности.
15 авг 13, 17:27    [14714641]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить