|
|
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Есть таблица - справочник, например улиц. В таблице 50 строк. Дочерняя таблица имеет > 1 млн. записей. По внешнему ключу индекс есть, а вот по первичному нужен ли индекс при таком количестве строк в родительской? А если записей будет уже 100 или 1000? Вообще, при каком количестве строк в родительской таблице целесообразно приделывать индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:11:04 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:13:48 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
SY, извиняюсь, неправильно выразился. Я не имею в виду foreign key как таковой, а например, просто индекс на поле id_parent в дочерней. Или же, допустим, есть первичный и внешний ключи, но нужно осуществлять поиск по неключевому полю родительской таблицы на котором индекса нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:21:42 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
если взять ту же таблицу улиц, допустим, на ней есть поле <тип> (ул., пр-кт, бул., пер. ...) и в дочерней таблице нужно выбрать все переулки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:23:37 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
daunito, кроме того, что SY сказал (в смысле принципиальной некорректности постановки вопроса), надо еще сказать, что маленький выигрыш (а какой еще выигрыш может тут быть?) не должен бы быть предметом больших обсуждений. имхо, поступайте согласно принятым у вас регламентам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:25:15 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
orawish, индекс есть. Мне просто стало интересно как определить целесообразность. 50 строк это реально мало. А 500? При каком количестве в этой ситуации он уже определенно нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:28:53 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Индекс же нужен не только для того чтобы селект быстрее отработал. Без индекса изменяя маленькую таблицу вы будете блокировать все записи в большой таблице, имеющей FK на маленькую. ИМХО быть или не быть индексу определяется далеко не размерами индексируемой таблички. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:35:58 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
daunitoorawish, индекс есть. Мне просто стало интересно как определить целесообразность. 50 строк это реально мало. А 500? При каком количестве в этой ситуации он уже определенно нужен?Про то, индексировать или нет внешние ключи - читай в последней книге Кайта или, например, здесь. Про индексирование первичного ключа вопрос стоять не может, для него в любом случае нужен индекс хоть уникальный хоть нет. Про индексирование маленьких таблиц - читай: "Маркеленков Сергей. Oracle: малоизвестные факты. Часть 3. Нужно ли индексировать маленькие таблицы? Oracle Magazine. Март - апрель 2008.". Но поскольку Oracle Magazine RE приказал долго жить - у тебя могут возникнуть некоторые проблемы с поиском статьи. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 18:44:46 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Константин КороповскийБез индекса изменяя маленькую таблицу вы будете блокировать все записи в большой таблице, имеющей 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. Ceccия II: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Естесственно, теперь если Ceccия I выдаст: Код: plsql 1. 2. то она будет висеть, т.к. индекса нет на FK. Если его создать. Ceccия I: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ceccия II: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. теперь если Ceccия I выдаст: Код: plsql 1. 2. 3. 4. 5. 6. то она HE будет висеть, т.к. есть индекс на FK. T.e. то что ты сказал с точностью до наоборот. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 19:15:07 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
SYКонстантин КороповскийБез индекса изменяя маленькую таблицу вы будете блокировать все записи в большой таблице, имеющей FK на маленькую. Это как?Думаю, он имел в виду, что будет накладываться table lock на дочернюю. И он прав. 10254769 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 19:23:45 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
КобанчегSYпропущено... Это как?Думаю, он имел в виду, что будет накладываться table lock на дочернюю. И он прав. 10254769 Есс-но речь идет не про изменение главной (маленькой), а про изменение первичного ключа в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 19:25:30 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
КобанчегЕсс-но речь идет не про изменение главной (маленькой), а про изменение первичного ключа в ней. Это как? 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. Ceccия II: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Теперь ROLLBACK вобеих сессиях и затем Ceccия I: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Ceccия II: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 19:47:05 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 19:56:14 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Кобанчег, Чего-то ты меня совсем запутал. Вопрос был про "целесообразность индекса на таблице с малым количеством строк". Я и ответил что PK индекс есть всегда. A в ответе Константину я сказал что индекс нужен не на маленькую (родитель) a на большую (дочерню) таблицу иначе изменение PK будет висеть. Так-что похоже вся дискуссия оказалась сплошным испорченным телефоном . SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 21:17:10 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
daunitoЕсть таблица - справочник, например улиц. В таблице 50 строк. Да, прав, по идее индекс делать бессмысленно. НО ... daunito Дочерняя таблица имеет > 1 млн. записей. По внешнему ключу индекс есть, а вот по первичному нужен ли индекс при таком количестве строк в родительской? А если записей будет уже 100 или 1000? Вообще, при каком количестве строк в родительской таблице целесообразно приделывать индекс? При каком целесообразно -- вопрос сложный, надо знать очень многое о СУБД, и о конкретных данных. Принцип -- надо посчитать кол-во чтений при доступе прямом и через индекс. Если таблица влезает в одну -две страницы, то особенно индексировать нет смысла.. НО! Тут у тебя первичный ключ, он во-первых уникальный, а во-вторых Constraint, сам по себе, и FK поддерживает (на него ссылаются). Так что тут обязаловка. То же самое можно сказать и про UNIQUE CONSTRAINT. А вот если тебе нужно создавать ещё какие-то индексы на этот справочник, тогда уже можешь думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 21:35:01 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
daunitoSY, извиняюсь, неправильно выразился. Я не имею в виду foreign key как таковой, а например, просто индекс на поле id_parent в дочерней. Или же, допустим, есть первичный и внешний ключи, но нужно осуществлять поиск по неключевому полю родительской таблицы на котором индекса нет. для таблицы в сотню строк доп. индекс не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 22:43:45 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Edward Shevtsovдля таблицы в сотню строк доп. индекс не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 08:48:32 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Смелое заявлениеEdward Shevtsovдля таблицы в сотню строк доп. индекс не нуженПатпесалсо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 09:24:34 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Мои пять копеек. 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. А ведь в EMP всего 14 строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 12:05:07 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
NisSamЕсли в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода. Что дешевле?Советую ознакомиться со структурой индекса и с понятием блока. Потом уже можно рассуждать о поиске нужного значения в листовом блоке индекса. А в приведенном тесте для начала сравни и объясни разницу в кол-ве логических чтений. Также можешь сравнить уникальный и не уникальный индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 12:43:01 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
wurdu, а ты объясни разницу во времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 13:11:30 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
NisSamwurdu, а ты объясни разницу во времени Ты не привел скрипты создания таблицы/индекса, поэтому я не могу смоделировать и объяснить. Поэтому я предложил начать объяснение разницы с сравнением кол-ва логических чтений. Фраза "Если в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода." неверна, т.к. при поиске по индексу мы находим индексный блок, и в этом блоке уже должны найти нужное нам значение. Т.к. данные в индексном блоке упорядочены, нам, конечно, может потребоваться принципиально меньшее кол-во сравнений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 13:30:55 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
NisSam Если в таблице 50 строк то для поиска строки в режиме FTS нужно 50 проверок. А при поиске через индекс максимум 4 операции перехода. Здравствуте уважаемый коллега. Какие 4 операцции перехода вы имели ввиду? С уважением, я. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 15:05:11 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
КобанчегПро индексирование маленьких таблиц - читай: "Маркеленков Сергей. Oracle: малоизвестные факты. Часть 3. Нужно ли индексировать маленькие таблицы? Oracle Magazine. Март - апрель 2008.". Но поскольку Oracle Magazine RE приказал долго жить - у тебя могут возникнуть некоторые проблемы с поиском статьи. :) apr-08_rdtex_facts.pdf Удалю через неделю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 17:24:32 |
|
||
|
целесообразность индекса на таблице с малым количеством строк
|
|||
|---|---|---|---|
|
#18+
Этанол Эталонович , спасибо за ссылку. Собственно статья только подтвердила мои мысли. Автор молодец проделал настоящее исследование. Его бы теперь на 11g повторить. Чтобы убедиться что ничего не изменилось. wurdu и брадобрей , Про 4 операции честно говоря написал от балды, прикинув на пальцах. И что интересно - не обращая внимание ни на что остальное гуру сразу же на них набросились. Т.е. результаты эксперимента и все остальное нам пофиг, а вот здесь мы можем придраться и придеремся. wurdu , судя по количеству ваших постов вы Ораклист со стажем и соответственно про схему SCOTT и таблички emp и dept из нее должны знать :-) Виноват, поленился описать процесс установки тестовой схемы SCOTT. В следующий раз буду подробно и нудно ее описывать Конечный вывод все равно практически однозначен - уникальные индексы нужны даже для таблицы с небольшим количеством строк. Почему вывод практически однозначен, а не просто однозначен? Потому что отклонения разные бывают и про часть из них хорошо написал Сергей Маркеленков. Абсолютно с ним согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 18:04:50 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=218&tid=1888144]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
105ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 437ms |

| 0 / 0 |
