|
|
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
Доброго! Подскажите, нормально ли такое поведение. Есть табличка пусть нексколько тысяч записей, по col2 индекс, малоселективный (3-4 значения) Есть 3 запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Так вот запросы 1 и 2 возвращают РАЗНЫЕ rowid в первых строках. Если добавить rowid в сортировку - всё становится нормально ессно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 19:48 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
gandalf-the-grey, а кто обещал доставать строки с одинаковыми col2 в одном и том же порядке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 20:36 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
gandalf-the-greyТак вот запросы 1 и 2 возвращают РАЗНЫЕ rowid в первых строках.Результаты упорядочены по col2? - А большего ты не просил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 07:38 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
Elic, Да, я вчера слишком абстрагировался от конкретной проблемы, которая заключается в следующем: реализую поиск неких данных по произвольному набору параметров с последующим постраничным отображением с сортировкой, воспользовавшись советами коллег с форума, за что им большое спасибо про параметры про пейджинг И всё бы хорошо, но когда поле сортировки "неудачное" - получается фигня. Неудачное - в смысле что оптимизатор выбирает TABLE ACCESS FULL При выбраном методе доступа для запроса типа Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. с планом Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Получается казус, что в некоторых диапазонах значений переменных номеров записей возвращаются ОДНИ и ТЕ ЖЕ ROWID Т.е., например, для диапазонов 201-300 и 501-600 в моём случае возвращается один набор ROWID (но с разными RN). Можно как-то избежать этого, кроме как создавать условия для того, чтобы первым шагом всегда был INDEX SCAN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 13:13 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
Хм... Я озадачен. Помогите, пожалуйста, решить шараду... Первые два кейса, одинаковый запрос, разные переменные - индекс используется, но пейджинг возвращает одинаковые данные для нескольких разных страниц. Третий вариант работает корректно для всех страниц. Разница в INDEX FAST FULL SCAN против INDEX FULL SCAN FAST FULL не гарантирует порядок чтения блоков в отличие от просто FULL Как-то можно заставить его в общем случае ВСЕГДА использовать FULL INDEX SCAN? Или нужно применить какие-то другие техники, когда нужно постраничное отображение с сортировкой, причем сортировка может быть по полю, содержащее одинаковые значения для всего возвращенного набора? Код: 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. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 15:33 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
gandalf-the-greyпричем сортировка может быть по полю, содержащее одинаковые значения для всего возвращенного набора?Детерминировать сортировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 15:51 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
Elicgandalf-the-greyпричем сортировка может быть по полю, содержащее одинаковые значения для всего возвращенного набора?Детерминировать сортировку. В каком смысле? Если добавить условия с сортировку, то вариант, я так понимаю, по каждому полю, по которому возможна сортировка, создавать индекс, дополнительно "детерминированный" чем-нибудь типа PK. Только, мне кажется, это не решит проблему, когда таблица сортируется по значению внешнего лукапа, как в моем примере. Это в любом случае приведет либо к TABLE ACCESS FULL, либо к INDEX FAST FULL SCAN основной таблицы-источника с последующей сортировкой. Это решит задачу отображения уникальных строк на разных страницах, но нивелирует то, что нужно для пейджинга: скорость при COUNT STOPKEY на INDEX FULL SCAN А с сортировкой по собственным полям, имеющим NOT NULL или индекс с nvl() проблем и так не будет. М.б. индексы на соединения? Или я ещё что-то упускаю? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 19:58 |
|
||
|
Сортировка по неселективному индексу
|
|||
|---|---|---|---|
|
#18+
gandalf-the-greyнивелирует то, что нужно для пейджинга: скоростьДо сих пор ты жаловался только на недетерминизм. Уж выбирай: шашечки или ехать. gandalf-the-greyпо каждому полю, по которому возможна сортировка, создавать индексИдиотизм. Табличка только ради остраничивания? - Так не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 07:52 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=175&tid=1886432]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 337ms |

| 0 / 0 |
