Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Индексы / 6 сообщений из 6, страница 1 из 1
16.02.2017, 10:54
    #39405534
Индексы
Приветсвую!

есть таблица:

Код: 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.
set SERVEROUTPUT ON 
declare
  is_exists pls_integer;
begin


select count(*) 
into is_exists
from all_tables where table_name = 'TEST__CODE_DATA';
if is_exists != 0 then
  execute immediate 'drop table TEST__CODE_DATA';

  execute immediate 'create table TEST__CODE_DATA(
    ID integer, -- PK
    CODE varchar(7),
    INDICATOR varchar(5)
  )';  
  
  execute immediate 'create index IDX_TEST__VALUE_CODE on TEST__CODE_DATA (CODE)';
  execute immediate 'create index IDX_TEST__VALUE_INDICATOR on TEST__CODE_DATA (INDICATOR)';
end if; 

-- на самом деле строк 4 с лишним миллиона
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (1, '023874', 'J');
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (2, '234444', NULL);
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (3, '332443', NULL);
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (4, '234342', 'N');
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (5, '234233', 'N');
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (6, '234444', NULL);
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (7, '200044', NULL);
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (8, '298774', NULL);
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (9, '298333', 'J');
insert into TEST__CODE_DATA (ID, CODE, INDICATOR) VALUES (10, '334443', 'J');
commit;


end;
/




у нас есть запрос


Код: plsql
1.
2.
select * from TEST__CODE_DATA
where INDICATOR = 'J';



Вопрос, действительно ли индекс IDX_TEST__VALUE_INDICATOR на текстовое поле INDICATOR, которое содержит всего три значения NULL, J и N - больше вереден чем полезен? B точный поиск будет работать медленее, с индексом чем без? Но почему?
...
Рейтинг: 0 / 0
16.02.2017, 11:16
    #39405548
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы
Андрей Сызранов
Код: plsql
1.
2.
3.
4.
if is_exists != 0 then
  execute immediate 'drop table TEST__CODE_DATA';

  execute immediate 'create table TEST__CODE_DATA(

Быдлокод.
Андрей Сызрановдействительно ли индекс IDX_TEST__VALUE_INDICATOR на текстовое поле INDICATOR, которое содержит всего три значения NULL, J и N - больше вереден чем полезен?Зависит от соотношения их количеств.
...
Рейтинг: 0 / 0
16.02.2017, 11:23
    #39405556
Индексы
Elic,

примерно 4,5 строк, предположим, соотношение 50% NULL, 50% J или N
...
Рейтинг: 0 / 0
16.02.2017, 11:25
    #39405560
veep_in_office
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы
ElicАндрей Сызранов
Код: plsql
1.
2.
3.
4.
if is_exists != 0 then
  execute immediate 'drop table TEST__CODE_DATA';

  execute immediate 'create table TEST__CODE_DATA(

Быдлокод.
Андрей Сызрановдействительно ли индекс IDX_TEST__VALUE_INDICATOR на текстовое поле INDICATOR, которое содержит всего три значения NULL, J и N - больше вереден чем полезен?Зависит от соотношения их количеств.

Индекс будет эффективен только лишь в том случае если выборка возвращает не более 3-4% от всей таблицы, в ином случае оптимизатор скорее всего перейдет на фулскан.

В вашем случае значение "J" занимает треть таблицы - индекс тут работать однозначно не будет.
...
Рейтинг: 0 / 0
16.02.2017, 11:31
    #39405569
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы
Андрей Сызранов50% J или N
Код: plaintext
"Вероятность встретить динозавра на улице - 50%. Либо встречу, либо нет" (с) 
...
Рейтинг: 0 / 0
16.02.2017, 12:53
    #39405634
veep_in_office
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индексы
Андрей СызрановElic,

примерно 4,5 строк, предположим, соотношение 50% NULL, 50% J или N

На мелких таблицах индекс вообще работать не будет при любом соотношении.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Индексы / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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