|
Использовать индекс
|
|||
---|---|---|---|
#18+
Братья по разуму, в Оракле я NULL. Дано: Код: plsql 1. 2. 3. 4. 5. 6.
Ищу одну запись Код: plsql 1. 2. 3.
В плане получаю авторTABLE ACCESS -- FULL. Пытаюсь добавить индекс Код: plsql 1. 2. 3. 4.
В плане получаю: авторTABLE ACCESS -- BY INDEX ROWID BATCHED INDEX -- FULL SCAN Вопрос: Как заставить оптимизатор использовать индекс SEEK, что нужно написать в предикате для данного индекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 11:25 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
Что-то вы явно не договариваете. В DDL у вас только колонка T$ITEM, а в запросе ещё есть T$CWAR. Так что приведите полный DDL таблицы и полный запрос без всяких "бла-бла-бла". На мой взгляд, вы упустили какую-то деталь, которая вам кажется неважной, но при этом она имеет решающее значение. А хинты в таких простых случаях лучше вообще не использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 11:43 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
PaulWist, А индекс именно так кто-то заставляет создавать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 11:58 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
PaulWist, Вы как-то так хотите? Код: 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. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 12:19 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
PuM256 Что-то вы явно не договариваете. В DDL у вас только колонка T$ITEM, а в запросе ещё есть T$CWAR. Так что приведите полный DDL таблицы и полный запрос без всяких "бла-бла-бла". На мой взгляд, вы упустили какую-то деталь, которая вам кажется неважной, но при этом она имеет решающее значение. 2 PuM256 Это не принципиально, пусть DDL будет такое: Код: plsql 1. 2. 3.
PuM256 А хинты в таких простых случаях лучше вообще не использовать. Цель была, в принципе заставить искать по индексу, ... я прекрасно понимаю, что оптимизатор достаточно умный, что бы на тривиальном плане не найти индекс. 2 Asmodeus Такой индекс - это реальность на которую я не могу повлиять :( Правильно ли я понимаю, что бы использовался "такой" индекс надо выполнить: Код: plsql 1.
те изменить настройки сессии??? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 13:21 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
PaulWist, nls_comp тоже надо поменять. Это можно делать через logon-триггер. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 13:53 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
Asmodeus, ОК, спасибо!!! Получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 14:51 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
Если в таблице одна запись, как в примере, то оптимизатору без разницы, что сканировать - таблицу или индекс. А уж если в индексе нет нужных полей, выбираемых по SELECT, то уж тем более нет смысла его читать и потом читать таблицу - двойная работа. Вообще же лучше почитать Кайта, например, для понимания механики и оптимизации создаваемых структур в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 19:22 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
Правильный Вася Если в таблице одна запись, как в примере, то оптимизатору без разницы, что сканировать - таблицу или индекс. Точнее так: если таблица размером до 5 блоков включительно, ЕМНИП, то индекс не будет использоваться даже если он формально помогает найти строчку быстро. Таблица прочитается целиком, т.к. оптимизатор считает что так быстрее. Правильный Вася А уж если в индексе нет нужных полей, выбираемых по SELECT, то уж тем более нет смысла его читать и потом читать таблицу - двойная работа. Это как? Если мне нужна строчка / немного строчек целиком из большой таблицы по индексу то Вы предполагаете что оптимизатор будет фуллсканить таблицу? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 19:55 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
witte Правильный Вася А уж если в индексе нет нужных полей, выбираемых по SELECT , то уж тем более нет смысла его читать и потом читать таблицу - двойная работа. Это как? Если мне нужна строчка / немного строчек целиком из большой таблицы по индексу то Вы предполагаете что оптимизатор будет фуллсканить таблицу? Вы, видимо, невнимательно прочли, те на таблице есть индекс по полю А, а предикат SELECT-а ищет по полю В, то в этом случае действительно оптимизатор вынужден сканировать таблицу целиком (не берём ситуацию когда данные умещаются на странице-блоке) Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 20:42 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
PaulWist witte пропущено... Это как? Если мне нужна строчка / немного строчек целиком из большой таблицы по индексу то Вы предполагаете что оптимизатор будет фуллсканить таблицу? Вы, видимо, невнимательно прочли, те на таблице есть индекс по полю А, а предикат SELECT-а ищет по полю В, то в этом случае действительно оптимизатор вынужден сканировать таблицу целиком (не берём ситуацию когда данные умещаются на странице-блоке) Код: plsql 1. 2. 3.
Да, верно, понял как select a, b, а не то что предикат по полю b. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 21:03 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
Правильный Вася Если в таблице одна запись, как в примере, то оптимизатору без разницы, что сканировать - таблицу или индекс. А уж если в индексе нет нужных полей, выбираемых по SELECT, то уж тем более нет смысла его читать и потом читать таблицу - двойная работа. witte Точнее так: если таблица размером до 5 блоков включительно, ЕМНИП, то индекс не будет использоваться даже если он формально помогает найти строчку быстро. Таблица прочитается целиком, т.к. оптимизатор считает что так быстрее. ну не правда же... minitab.sql Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
plans Код: 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.
full-output Код: 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. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140.
Модератор: Вложение удалено. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2021, 01:45 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
witte Правильный Вася А уж если в индексе нет нужных полей, выбираемых по SELECT, то уж тем более нет смысла его читать и потом читать таблицу - двойная работа. Это как? Если мне нужна строчка / немного строчек целиком из большой таблицы по индексу то Вы предполагаете что оптимизатор будет фуллсканить таблицу? Вы вырвали предложение из контекста про одну запись в таблице. Если индекс не содержит всё, что нужно выбрать, то нет смысла в двойном чтении. Sayan Malakshinov ну не правда же... Боюсь, что это зависит от наличия адекватной статистики, размеров блоков и прочих настроек. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2021, 19:07 |
|
Использовать индекс
|
|||
---|---|---|---|
#18+
Правильный Вася Боюсь, что это зависит от наличия адекватной статистики, размеров блоков и прочих настроек. ¯\_(ツ)_/¯ ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2021, 02:27 |
|
|
start [/forum/topic.php?fid=52&fpage=8&tid=1879752]: |
0ms |
get settings: |
19ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
27ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
617ms |
get tp. blocked users: |
1ms |
others: | 362ms |
total: | 1039ms |
0 / 0 |