Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс / 9 сообщений из 9, страница 1 из 1
09.09.2016, 09:46:11
    #39306358
new_dfs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
Привет! Разбираюсь в коде и есть непонимание,
зачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?

select * from tab where a=:1 and b=:2 and c=:3
...
Рейтинг: 0 / 0
09.09.2016, 10:07:17
    #39306383
звездочка,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
new_dfs,

чтобы был повод понукать за говнокод.
...
Рейтинг: 0 / 0
09.09.2016, 10:22:35
    #39306401
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
new_dfsПривет! Разбираюсь в коде и есть непонимание,
зачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?
select * from tab where a=:1 and b=:2 and c=:3
Код: plsql
1.
2.
3.
1. Чтобы была возможность использовать Index Full Scan / Index Fast Full Scan 
для "select a,b,c from tab where a=:1 and b=:2 and c=:3 and a is not null and b is not null and c is not null"
2. Чтобы снизить кол-во операций fetch by rowid
...
Рейтинг: 0 / 0
09.09.2016, 10:33:56
    #39306416
new_dfs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
ORA__SQLnew_dfsПривет! Разбираюсь в коде и есть непонимание,
зачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?
select * from tab where a=:1 and b=:2 and c=:3
Код: plsql
1.
2.
3.
1. Чтобы была возможность использовать Index Full Scan / Index Fast Full Scan 
для "select a,b,c from tab where a=:1 and b=:2 and c=:3 and a is not null and b is not null and c is not null"
2. Чтобы снизить кол-во операций fetch by rowid


Да, про select a,b,c в прцнипе понятно, чтобы вообще не идти в таблицу. Но в системе в основном *, иногда перечисление полей, которых нет в индексе.

пока что возможным вариантом выглядит поиск по null-ам, спасибо.
...
Рейтинг: 0 / 0
09.09.2016, 14:19:29
    #39306608
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
ORA__SQL
Код: plsql
1.
2.
1. Чтобы была возможность использовать Index Full Scan / Index Fast Full Scan 
для "select a,b,c from tab where a=:1 and b=:2 and c=:3 and a is not null and b is not null and c is not null"


Эээ... Что бы это значило?
...
Рейтинг: 0 / 0
09.09.2016, 14:29:24
    #39306616
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
new_dfsпока что возможным вариантом выглядит поиск по null-ам, спасибо.
индексация null-значений - верно.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
drop table test_idx_tab purge
 drop table test_idx_tab succeeded.

create table test_idx_tab(a, b, c, str) as 
select nullif(mod(rownum,123),0), nullif(mod(rownum,5),0), nullif(mod(rownum,7),0), rpad(rownum,300,'x')
from dual connect by level < 1000
create table succeeded.

create index test_idx_tab$comp on test_idx_tab(a, b, c)
create index succeeded.

select a,b,c from test_idx_tab where a is null and b = 4 and c = 5

A                                       B                                       C                                       
--------------------------------------- --------------------------------------- --------------------------------------- 
                                        4                                       5                                       

1 rows selected

select * from table(dbms_xplan.display_cursor())

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
SQL_ID  9x63nrma9uxs7, child number 1                                                                                                                                                                                                                                                                        
-------------------------------------                                                                                                                                                                                                                                                                        
select a,b,c from test_idx_tab where a is null and b = 4 and c = 5                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                             
Plan hash value: 2398808346                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                             
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
| Id  | Operation        | Name              | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                                                                                                                       
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
|   0 | SELECT STATEMENT |                   |       |       |     1 (100)|          |                                                                                                                                                                                                                       
|*  1 |  INDEX RANGE SCAN| TEST_IDX_TAB$COMP |     1 |    39 |     1   (0)| 00:00:01 |                                                                                                                                                                                                                       
--------------------------------------------------------------------------------------                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                             
Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
---------------------------------------------------                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                             
   1 - access("A" IS NULL AND "B"=4 AND "C"=5)                                                                                                                                                                                                                                                               
       filter(("B"=4 AND "C"=5))                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                             
Note                                                                                                                                                                                                                                                                                                         
-----                                                                                                                                                                                                                                                                                                        
   - dynamic sampling used for this statement (level=2)                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                             

23 rows selected
...
Рейтинг: 0 / 0
09.09.2016, 14:58:13
    #39306642
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
andrey_anonymousORA__SQL
Код: plsql
1.
2.
1. Чтобы была возможность использовать Index Full Scan / Index Fast Full Scan 
для "select a,b,c from tab where a=:1 and b=:2 and c=:3 and a is not null and b is not null and c is not null"


Эээ... Что бы это значило?
Поспешил :)
Код: plsql
1.
"select a,b,c from tab where (a, b или с) is not null"
...
Рейтинг: 0 / 0
10.09.2016, 17:50:36
    #39307086
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
new_dfsзачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?Можно поставить и обратный вопрос - в каких случаях имеет смысл создавать индексы (a), (a,b) или (a,c) при имеющемся (a,b,c)?
...
Рейтинг: 0 / 0
10.09.2016, 18:04:42
    #39307091
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
new_dfsзачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?
Не уверен насчет предикатов, но бывает, очень помогает, если селект содержит поля, которые все есть в индексе )
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]