powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / целесообразность индекса на таблице с малым количеством строк
25 сообщений из 32, страница 1 из 2
целесообразность индекса на таблице с малым количеством строк
    #37763770
daunito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица - справочник, например улиц. В таблице 50 строк. Дочерняя таблица имеет > 1 млн. записей. По внешнему ключу индекс есть, а вот по первичному нужен ли индекс при таком количестве строк в родительской? А если записей будет уже 100 или 1000? Вообще, при каком количестве строк в родительской таблице целесообразно приделывать индекс?
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763775
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daunito,

??? Last time I checked PK was still supported by index. So you want it or not, if you have FK on child table - you have index on PK/UK in parent table.

SY.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763785
daunito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, извиняюсь, неправильно выразился. Я не имею в виду foreign key как таковой, а например, просто индекс на поле id_parent в дочерней. Или же, допустим, есть первичный и внешний ключи, но нужно осуществлять поиск по неключевому полю родительской таблицы на котором индекса нет.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763787
daunito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если взять ту же таблицу улиц, допустим, на ней есть поле <тип> (ул., пр-кт, бул., пер. ...) и в дочерней таблице нужно выбрать все переулки
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763790
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daunito,

кроме того, что SY сказал (в смысле принципиальной некорректности постановки вопроса),
надо еще сказать, что маленький выигрыш (а какой еще выигрыш может тут быть?) не должен бы быть предметом больших обсуждений.
имхо, поступайте согласно принятым у вас регламентам
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763792
daunito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish, индекс есть. Мне просто стало интересно как определить целесообразность. 50 строк это реально мало. А 500? При каком количестве в этой ситуации он уже определенно нужен?
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763806
Индекс же нужен не только для того чтобы селект быстрее отработал.
Без индекса изменяя маленькую таблицу вы будете блокировать все записи в большой таблице, имеющей FK на маленькую.

ИМХО быть или не быть индексу определяется далеко не размерами индексируемой таблички.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763823
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daunitoorawish, индекс есть. Мне просто стало интересно как определить целесообразность. 50 строк это реально мало. А 500? При каком количестве в этой ситуации он уже определенно нужен?Про то, индексировать или нет внешние ключи - читай в последней книге Кайта или, например, здесь.
Про индексирование первичного ключа вопрос стоять не может, для него в любом случае нужен индекс хоть уникальный хоть нет.
Про индексирование маленьких таблиц - читай: "Маркеленков Сергей. Oracle: малоизвестные факты. Часть 3. Нужно ли индексировать маленькие таблицы? Oracle Magazine. Март - апрель 2008.". Но поскольку Oracle Magazine RE приказал долго жить - у тебя могут возникнуть некоторые проблемы с поиском статьи. :)
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763863
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Константин КороповскийБез индекса изменяя маленькую таблицу вы будете блокировать все записи в большой таблице, имеющей FK на маленькую.


Это как?

Ceccия I:

Код: 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.
SQL> create table emp1 as select * from emp;

Table created.

SQL> create table dept1 as select * from dept;

Table created.

SQL> alter table dept1
  2    add constraint dept1_pk
  3      primary key(deptno)
  4  /

Table altered.

SQL> alter table emp1
  2    add constraint emp1_fk
  3      foreign key(deptno)
  4      references dept1
  5  /

Table altered.

SQL> update dept1 set dname = 'ABC'
  2  /

4 rows updated.



Ceccия II:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> update emp1 set job = 'JANITOR'
  2  /

14 rows updated.

SQL> update emp1 set deptno = 10
  2  /

14 rows updated.

SQL> 



Естесственно, теперь если Ceccия I выдаст:

Код: plsql
1.
2.
SQL> update dept1 set deptno = deptno
  2  /



то она будет висеть, т.к. индекса нет на FK. Если его создать.

Ceccия I:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> create index emp1_idx
  2    on emp1(deptno)
  3  /

Index created.

SQL> update dept1 set dname = 'ABC'
  2  /

4 rows updated.

SQL> 



Ceccия II:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> update emp1 set job = 'JANITOR'
  2  /

14 rows updated.

SQL> update emp1 set deptno = 10
  2  /

14 rows updated.

SQL> 



теперь если Ceccия I выдаст:

Код: plsql
1.
2.
3.
4.
5.
6.
SQL> update dept1 set deptno = deptno
  2  /

4 rows updated.

SQL> 



то она HE будет висеть, т.к. есть индекс на FK. T.e. то что ты сказал с точностью до наоборот.

SY.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763873
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYКонстантин КороповскийБез индекса изменяя маленькую таблицу вы будете блокировать все записи в большой таблице, имеющей FK на маленькую.


Это как?Думаю, он имел в виду, что будет накладываться table lock на дочернюю. И он прав. 10254769
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763878
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КобанчегSYпропущено...


Это как?Думаю, он имел в виду, что будет накладываться table lock на дочернюю. И он прав. 10254769 Есс-но речь идет не про изменение главной (маленькой), а про изменение первичного ключа в ней.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763899
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КобанчегЕсс-но речь идет не про изменение главной (маленькой), а про изменение первичного ключа в ней.

Это как? Ceccия I:

Код: 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.
SQL> drop table emp1;

Table dropped.

SQL> drop table dept1;

Table dropped.

SQL> create table emp1 as select * from emp;

Table created.

SQL> 
SQL> create table dept1 as select * from dept;

Table created.

SQL> alter table dept1
  2  add constraint dept1_pk
  3      primary key(deptno)
  4  /

Table altered.

SQL> alter table emp1
  2    add constraint emp1_fk
  3      foreign key(deptno)
  4      references dept1
  5  /

Table altered.

SQL> update dept1
  2     set deptno = 99
  3   where deptno = 40
  4  /

1 row updated.

SQL> 



Ceccия II:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> update emp1 set job = 'JANITOR'
  2  /

14 rows updated.

SQL> update emp1 set deptno = 10
  2  /

14 rows updated.

SQL> 



Теперь ROLLBACK вобеих сессиях и затем Ceccия I:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> rollback;

Rollback complete.

SQL> update dept1
  2     set deptno = deptno
  3  /

4 rows updated.

SQL>  



Ceccия II:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> rollback;

Rollback complete.

SQL> update emp1 set deptno = 10
  2  /

14 rows updated.

SQL> 



SY.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763906
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYКобанчегЕсс-но речь идет не про изменение главной (маленькой), а про изменение первичного ключа в ней.

Это как? http://www.sql.ru/forum/actualthread.aspx?tid=46520&pg=1&mid=10254769#10254769]It still obtains the table-level share lock, but then releases it immediately after obtaining it.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763956
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег,

Чего-то ты меня совсем запутал. Вопрос был про "целесообразность индекса на таблице с малым количеством строк". Я и ответил что PK индекс есть всегда. A в ответе Константину я сказал что индекс нужен не на маленькую (родитель) a на большую (дочерню) таблицу иначе изменение PK будет висеть. Так-что похоже вся дискуссия оказалась сплошным испорченным телефоном .

SY.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37763966
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daunitoЕсть таблица - справочник, например улиц. В таблице 50 строк.


Да, прав, по идее индекс делать бессмысленно. НО ...

daunito Дочерняя таблица имеет > 1 млн. записей. По внешнему ключу индекс есть, а вот по первичному нужен ли индекс при таком количестве строк в родительской? А если записей будет уже 100 или 1000? Вообще, при каком количестве строк в родительской таблице целесообразно приделывать индекс?

При каком целесообразно -- вопрос сложный, надо знать очень многое о СУБД, и о конкретных данных.
Принцип -- надо посчитать кол-во чтений при доступе прямом и через индекс.
Если таблица влезает в одну -две страницы, то особенно индексировать нет смысла.. НО!

Тут у тебя первичный ключ, он во-первых уникальный, а во-вторых Constraint, сам по себе, и
FK поддерживает (на него ссылаются).

Так что тут обязаловка. То же самое можно сказать и про UNIQUE CONSTRAINT.

А вот если тебе нужно создавать ещё какие-то индексы на этот справочник, тогда уже можешь думать.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764058
Фотография Edward Shevtsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daunitoSY, извиняюсь, неправильно выразился. Я не имею в виду foreign key как таковой, а например, просто индекс на поле id_parent в дочерней. Или же, допустим, есть первичный и внешний ключи, но нужно осуществлять поиск по неключевому полю родительской таблицы на котором индекса нет.

для таблицы в сотню строк доп. индекс не нужен
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764246
Edward Shevtsovдля таблицы в сотню строк доп. индекс не нужен
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764251
Г
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Г
Гость
Смелое заявлениеEdward Shevtsovдля таблицы в сотню строк доп. индекс не нуженПатпесалсо
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764322
NisSam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мои пять копеек.

IMHO индекс нужен всегда.

Все академические (ставшие легендами) рассуждения о том нужен индекс или нет предполагали что и индекс и таблица не кешированы и поэтому считали исключительно количество физических чтений. На фоне предполагаемых физических чтений, временем процессора обоснованно пренебрегали.

В нынешних БД ситуация обычно совсем другая. Такие маленькие таблички практически всегда хорошо кешируются и физических чтений нет как класса. Поэтому и арифметика нужна совсем другая - чисто по ЦПУ.

Если в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода. Что дешевле?

Ну и в доказательство свое правоты

connect scott/tiger

Код: 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.
SQL> set timing on
SQL> 
SQL> declare
  2  begin
  3   for i in 1..1E5 loop
  4     for e in (select ename from emp where empno=7788) loop
  5       null;
  6     end loop;
  7   end loop;
  8  end;
  9  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:01.93
SQL> 
SQL> declare
  2  begin
  3   for i in 1..1E5 loop
  4     for e in (select /*+  FULL(emp)  */ ename from emp where empno=7788) loop
  5       null;
  6     end loop;
  7   end loop;
  8  end;
  9  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.56


А ведь в EMP всего 14 строк.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764340
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NisSamЕсли в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода. Что дешевле?Советую ознакомиться со структурой индекса и с понятием блока. Потом уже можно рассуждать о поиске нужного значения в листовом блоке индекса. А в приведенном тесте для начала сравни и объясни разницу в кол-ве логических чтений. Также можешь сравнить уникальный и не уникальный индексы.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764347
NisSam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wurdu,

а ты объясни разницу во времени
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764353
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NisSamwurdu,

а ты объясни разницу во времени Ты не привел скрипты создания таблицы/индекса, поэтому я не могу смоделировать и объяснить. Поэтому я предложил начать объяснение разницы с сравнением кол-ва логических чтений. Фраза "Если в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода." неверна, т.к. при поиске по индексу мы находим индексный блок, и в этом блоке уже должны найти нужное нам значение. Т.к. данные в индексном блоке упорядочены, нам, конечно, может потребоваться принципиально меньшее кол-во сравнений.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764410
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NisSam
Если в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода.

Здравствуте уважаемый коллега. Какие 4 операцции перехода вы имели ввиду?

С уважением, я.
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764536
Этанол Эталонович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КобанчегПро индексирование маленьких таблиц - читай: "Маркеленков Сергей. Oracle: малоизвестные факты. Часть 3. Нужно ли индексировать маленькие таблицы? Oracle Magazine. Март - апрель 2008.". Но поскольку Oracle Magazine RE приказал долго жить - у тебя могут возникнуть некоторые проблемы с поиском статьи. :)
apr-08_rdtex_facts.pdf

Удалю через неделю
...
Рейтинг: 0 / 0
целесообразность индекса на таблице с малым количеством строк
    #37764573
NisSam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этанол Эталонович ,
спасибо за ссылку. Собственно статья только подтвердила мои мысли. Автор молодец проделал настоящее исследование. Его бы теперь на 11g повторить. Чтобы убедиться что ничего не изменилось.

wurdu и брадобрей ,
Про 4 операции честно говоря написал от балды, прикинув на пальцах. И что интересно - не обращая внимание ни на что остальное гуру сразу же на них набросились. Т.е. результаты эксперимента и все остальное нам пофиг, а вот здесь мы можем придраться и придеремся.

wurdu ,
судя по количеству ваших постов вы Ораклист со стажем и соответственно про схему SCOTT и таблички emp и dept из нее должны знать :-) Виноват, поленился описать процесс установки тестовой схемы SCOTT. В следующий раз буду подробно и нудно ее описывать

Конечный вывод все равно практически однозначен - уникальные индексы нужны даже для таблицы с небольшим количеством строк. Почему вывод практически однозначен, а не просто однозначен? Потому что отклонения разные бывают и про часть из них хорошо написал Сергей Маркеленков. Абсолютно с ним согласен.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / целесообразность индекса на таблице с малым количеством строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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