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

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

чтобы был повод понукать за говнокод.
...
Рейтинг: 0 / 0
Составной индекс
    #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
Составной индекс
    #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
Составной индекс
    #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
Составной индекс
    #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
Составной индекс
    #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
Составной индекс
    #39307086
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
new_dfsзачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?Можно поставить и обратный вопрос - в каких случаях имеет смысл создавать индексы (a), (a,b) или (a,c) при имеющемся (a,b,c)?
...
Рейтинг: 0 / 0
Составной индекс
    #39307091
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
new_dfsзачем нужен индекс по 3 полям (a,b,c) , вместо, к примеру, только первого (a), у которого высокая селективность ?
Не уверен насчет предикатов, но бывает, очень помогает, если селект содержит поля, которые все есть в индексе )
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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