|
|
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Мне нужно соединить в запросе две таблицы, одна из которых довольно большая (под 100М записей). Проблема в том, что прямой связи по ключу между этими таблицами нет. Нужно соединять либо через строчное поле (что нежелательно, т.к. значение этого поля во второй таблице может изменяться), либо соединять через третью таблицу, которая имеет под 300М записей и в которой будут дубли. DDL таблиц такой (в листинг не включал констрейны и индексы по неиспользуемым полям). Первая таблица: Код: 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. Вторая таблица: Код: 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. Вообще эти две таблицы можно соединить через RADACCT.USERNAME=SERVICES.LOGIN, но значение SERVICES.LOGIN непостоянно и может изменяться. Также их можно соединить через третью таблицу: Код: 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. Делаю такой запрос: Код: plsql 1. 2. 3. 4. 5. 6. Запрос выполняется быстро (30мс), план выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Такой запрос предотвращает дубли и выполняется относительно быстро (1-2 секунды): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. В результате около 10к строк, план выглядит все еще прилично: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. План такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Что я не заметил? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 15:49 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
И второй вопрос. В первой таблице поле ACCTSTARTTIME проиндексировано, а поле ACCTSTOPTIME нет. Но мне хотелось бы найти записи, в которых в искомый диапазон попадало бы не поле ACCTSTARTTIME, а диапазон ACCTSTOPTIME. То есть если искомый диапазон 2016-06-02...2016-06-03, а в таблице есть запись с ACCTSTARTTIME=2016-06-01 и ACCTSTOPTIME=2016-06-06, то она в выборку не попадет, а мне бы хотелось, чтобы она попала. Если я напишу так: Код: plsql 1. 2. как это условие сработает? Набор строк отфильтруется по индексированному ACCTSTARTTIME и к результату применится вторая проверка? Или я получу full scan? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 15:57 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.Если я напишу так: Напутал. Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 16:01 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Если без добавления индекса на ACCTSTOPTIME никак не обойтись, то посоветуйте, как его добавить, чтобы не помешать работе сервера и приложений? Или просто добавить, а сервер сам разберется? И можно ли индекс добавить таким образом, чтобы значение TIMESTAMP'1970-01-01 03:00:00' интерпретировалось как специальное, которое больше любого другого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 16:16 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Сделал так: Код: 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. Выполняю запрос: Код: plsql 1. 2. 3. Получаю одну строку, с RADACCTID=2. А почему не выводится RADACCTID=1? Или function-based-index это что-то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 16:38 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., У тебя более 500 сообщений в ветке оракл, Но ты так и не понял , что для того чтобы тебе обьяснили почему что то тормозит, нужно выкладывать больше информации, чем голый explain ? Там же даже нет таймингов . Выкладывай план с рантайм статистиками или ткпроф, тогда можно будет предметно что то ответить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 16:42 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Понял, сделаю. А по плану каких-то очевидных проблем нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 17:12 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Наконец удалось сделать трассировку. Кстати, теперь последний запрос с группировкой выполняется 3-5 секунд, что приемлемо. Но результаты трассировки прилагаю. Код: plaintext 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. Тайминги по каждой строчке плана я теперь увидел, но остальные моменты непонятны. На что нужно обращать внимание, если запрос начнет тормозить? На cpu и disk? И еще непонятно, почему в elapsed указано 13 секунд, запрос выполняется быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 20:40 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., Меня только что выебли на работе, а ты про какие-то индексы тут говоришь!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 21:38 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
softwarer_Alibek B., Меня только что выебли на работе, а ты про какие-то индексы тут говоришь!!выебли то за индексы небось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 22:24 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться. Есть такой запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Выполняется вообщем быстро. Стоит мне заменить select * на select C.CUSTOMER_ID, как запрос выполняется очень долго. Сделать трассировку до конца не получилось - запрос выполнялся долго, я его прервал. Код: plaintext 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. explain plan отличаются сильно: select * Код: plaintext 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. select C.CUSTOMER_ID Код: plaintext 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. На мой взгляд, второй запрос должен быть быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 23:11 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. Здесь я ограничиваю список сессий периодом с 2016-10-01 по 2016-10-10. Если я указываю период с 2016-10-03 по 2016-10-10, то запрос (select C.CUSTOMER_ID) выполняется быстро (150мс), возвращается около 9к строк. Если я указываю период на день раньше (с 2016-10-02 по 2016-10-10), то этот же запрос выполняется очень долго. Если я указываю период с 2016-10-03 по 2016-10-15, то запрос снова выполняется быстро. То есть запрос начинает тормозить, если я пытаюсь выбрать данные до 2016-10-03. Таблица RADACCT не партиционирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2016, 23:23 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B. Код: plsql 1. Покажи результат: Код: 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. зы. простой и не очень надежный вариант: дропни гистограммы по этому полю, выстави high_value у него в 2020-01-01 и зафиксируй статистику :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2016, 00:49 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
xtenderПокажи результат OWNERTABLE_NAMECOLUMN_NAMEDATA_TYPEEP_VALUEENDPOINT_VALUEDELTA_VALUESENDPOINT_NUMBERDELTA_NUMBERSENDPOINT_ACTUAL_VALUEBILLINGRADACCTACCTSTARTTIMEDATE2010-03-272455282,52531252455282,525312500BILLINGRADACCTACCTSTARTTIMEDATE2011-03-042455625,03247685342,5071643511BILLINGRADACCTACCTSTARTTIMEDATE2011-05-222455704,4774305679,4449537121BILLINGRADACCTACCTSTARTTIMEDATE2011-07-262455768,8397916764,3623611131BILLINGRADACCTACCTSTARTTIMEDATE2011-09-182455823,4604166754,62062541BILLINGRADACCTACCTSTARTTIMEDATE2011-11-062455872,3512268548,8908101851BILLINGRADACCTACCTSTARTTIMEDATE2011-12-142455909,7198958337,3686689861BILLINGRADACCTACCTSTARTTIMEDATE2012-01-202455946,8029166737,0830208471BILLINGRADACCTACCTSTARTTIMEDATE2012-02-212455978,8554050932,0524884281BILLINGRADACCTACCTSTARTTIMEDATE2012-03-212456007,5419560228,6865509391BILLINGRADACCTACCTSTARTTIMEDATE2012-04-142456031,8849768524,34302083101BILLINGRADACCTACCTSTARTTIMEDATE2012-05-122456060,0000810228,11510417111BILLINGRADACCTACCTSTARTTIMEDATE2012-06-102456088,843796328,84371528121BILLINGRADACCTACCTSTARTTIMEDATE2012-07-062456115,0058564826,16206018131BILLINGRADACCTACCTSTARTTIMEDATE2012-08-012456140,9687615725,96290509141BILLINGRADACCTACCTSTARTTIMEDATE2012-08-262456165,7832523124,81449074151BILLINGRADACCTACCTSTARTTIMEDATE2012-09-202456191,0000810225,21682871161BILLINGRADACCTACCTSTARTTIMEDATE2012-10-132456213,9338657422,93378472171BILLINGRADACCTACCTSTARTTIMEDATE2012-10-302456230,5295486116,59568287181BILLINGRADACCTACCTSTARTTIMEDATE2012-11-172456248,7413078718,21175926191BILLINGRADACCTACCTSTARTTIMEDATE2012-12-012456262,8524189814,11111111201BILLINGRADACCTACCTSTARTTIMEDATE2012-12-162456278,1043171315,25189815211BILLINGRADACCTACCTSTARTTIMEDATE2013-01-012456294,3334259316,2291088221BILLINGRADACCTACCTSTARTTIMEDATE2013-01-222456314,801562520,46813657231BILLINGRADACCTACCTSTARTTIMEDATE2013-02-202456343,599062528,7975241BILLINGRADACCTACCTSTARTTIMEDATE2013-03-042456356,2352199112,63615741251BILLINGRADACCTACCTSTARTTIMEDATE2013-03-172456368,7636458312,52842592261BILLINGRADACCTACCTSTARTTIMEDATE2013-03-292456380,9609143512,19726852271BILLINGRADACCTACCTSTARTTIMEDATE2013-04-092456392,4132870411,45237269281BILLINGRADACCTACCTSTARTTIMEDATE2013-04-202456403,4364351911,02314815291BILLINGRADACCTACCTSTARTTIMEDATE2013-05-022456414,7455555611,30912037301BILLINGRADACCTACCTSTARTTIMEDATE2013-05-112456424,359560199,61400463311BILLINGRADACCTACCTSTARTTIMEDATE2013-05-212456434,187939829,82837963321BILLINGRADACCTACCTSTARTTIMEDATE2013-05-312456444,3544791710,16653935331BILLINGRADACCTACCTSTARTTIMEDATE2013-06-102456454,265150469,91067129341BILLINGRADACCTACCTSTARTTIMEDATE2013-06-202456463,823368069,5582176351BILLINGRADACCTACCTSTARTTIMEDATE2013-06-292456473,16339129,34002314361BILLINGRADACCTACCTSTARTTIMEDATE2013-07-082456482,118831028,95543982371BILLINGRADACCTACCTSTARTTIMEDATE2013-07-172456490,848784728,7299537381BILLINGRADACCTACCTSTARTTIMEDATE2013-07-252456499,227222228,3784375391BILLINGRADACCTACCTSTARTTIMEDATE2013-08-032456508,342557879,11533565401BILLINGRADACCTACCTSTARTTIMEDATE2013-08-132456518,379733810,03717593411BILLINGRADACCTACCTSTARTTIMEDATE2013-08-222456527,166967598,78723379421BILLINGRADACCTACCTSTARTTIMEDATE2013-08-302456535,267789358,10082176431BILLINGRADACCTACCTSTARTTIMEDATE2013-09-082456544,152372698,88458334441BILLINGRADACCTACCTSTARTTIMEDATE2013-09-152456551,228414357,07604166451BILLINGRADACCTACCTSTARTTIMEDATE2013-09-232456559,168472227,94005787461BILLINGRADACCTACCTSTARTTIMEDATE2013-10-012456566,867013897,69854167471BILLINGRADACCTACCTSTARTTIMEDATE2013-10-092456575,058055568,19104167481BILLINGRADACCTACCTSTARTTIMEDATE2013-10-172456582,681724547,62366898491BILLINGRADACCTACCTSTARTTIMEDATE2013-10-242456590,204664357,52293981501BILLINGRADACCTACCTSTARTTIMEDATE2013-11-012456598,36723388,16256945511BILLINGRADACCTACCTSTARTTIMEDATE2013-11-102456606,641087968,27385416521BILLINGRADACCTACCTSTARTTIMEDATE2013-11-172456614,175613437,53452547531BILLINGRADACCTACCTSTARTTIMEDATE2013-11-242456621,098576396,92296296541BILLINGRADACCTACCTSTARTTIMEDATE2013-12-012456628,185694447,08711805551BILLINGRADACCTACCTSTARTTIMEDATE2013-12-092456636,080335657,89464121561BILLINGRADACCTACCTSTARTTIMEDATE2013-12-152456642,261192136,18085648571BILLINGRADACCTACCTSTARTTIMEDATE2013-12-222456648,947314816,68612268581BILLINGRADACCTACCTSTARTTIMEDATE2013-12-282456655,203981486,25666667591BILLINGRADACCTACCTSTARTTIMEDATE2014-01-042456661,998645836,79466435601BILLINGRADACCTACCTSTARTTIMEDATE2014-01-112456668,633055566,63440973611BILLINGRADACCTACCTSTARTTIMEDATE2014-01-182456675,825497697,19244213621BILLINGRADACCTACCTSTARTTIMEDATE2014-01-252456683,057152787,23165509631BILLINGRADACCTACCTSTARTTIMEDATE2014-02-022456691,374548618,31739583641BILLINGRADACCTACCTSTARTTIMEDATE2014-02-092456698,260844916,8862963651BILLINGRADACCTACCTSTARTTIMEDATE2014-02-172456706,103252327,84240741661BILLINGRADACCTACCTSTARTTIMEDATE2014-02-242456712,837337966,73408564671BILLINGRADACCTACCTSTARTTIMEDATE2014-03-032456719,629155096,79181713681BILLINGRADACCTACCTSTARTTIMEDATE2014-03-102456727,354629637,72547454691BILLINGRADACCTACCTSTARTTIMEDATE2014-03-182456735,44973388,09510417701BILLINGRADACCTACCTSTARTTIMEDATE2014-03-262456743,009988437,56025463711BILLINGRADACCTACCTSTARTTIMEDATE2014-04-032456751,073611118,06362268721BILLINGRADACCTACCTSTARTTIMEDATE2014-04-112456759,172337968,09872685731BILLINGRADACCTACCTSTARTTIMEDATE2014-04-192456766,515740747,34340278741BILLINGRADACCTACCTSTARTTIMEDATE2014-04-262456774,316666677,80092593751BILLINGRADACCTACCTSTARTTIMEDATE2014-05-052456783,310185198,99351852761BILLINGRADACCTACCTSTARTTIMEDATE2014-05-132456791,291979177,98179398771BILLINGRADACCTACCTSTARTTIMEDATE2014-05-202456798,427430567,13545139781BILLINGRADACCTACCTSTARTTIMEDATE2014-05-282456806,262476857,83504629791BILLINGRADACCTACCTSTARTTIMEDATE2014-06-072456816,181111119,91863426801BILLINGRADACCTACCTSTARTTIMEDATE2014-06-152456824,291944448,11083333811BILLINGRADACCTACCTSTARTTIMEDATE2014-06-242456832,777534728,48559028821BILLINGRADACCTACCTSTARTTIMEDATE2014-07-032456842,159675939,38214121831BILLINGRADACCTACCTSTARTTIMEDATE2014-07-122456851,16004639,00037037841BILLINGRADACCTACCTSTARTTIMEDATE2014-07-132456852,427395831,26734953851BILLINGRADACCTACCTSTARTTIMEDATE2014-07-142456853,051898150,62450232861BILLINGRADACCTACCTSTARTTIMEDATE2014-07-152456854,227094911,17519676871BILLINGRADACCTACCTSTARTTIMEDATE2014-07-222456861,39093757,16384259881BILLINGRADACCTACCTSTARTTIMEDATE2014-07-302456869,176273157,78533565891BILLINGRADACCTACCTSTARTTIMEDATE2014-08-082456878,026388898,85011574901BILLINGRADACCTACCTSTARTTIMEDATE2014-08-162456886,198101858,17171296911BILLINGRADACCTACCTSTARTTIMEDATE2014-08-232456893,296257,09814815921BILLINGRADACCTACCTSTARTTIMEDATE2014-08-312456900,683333337,38708333931BILLINGRADACCTACCTSTARTTIMEDATE2014-09-082456909,289629638,6062963941BILLINGRADACCTACCTSTARTTIMEDATE2014-09-162456917,32589128,03626157951BILLINGRADACCTACCTSTARTTIMEDATE2014-09-232456924,222835656,89694445961BILLINGRADACCTACCTSTARTTIMEDATE2014-09-302456931,273530097,05069444971BILLINGRADACCTACCTSTARTTIMEDATE2014-10-082456939,20870377,93517361981BILLINGRADACCTACCTSTARTTIMEDATE2014-10-152456946,259224547,05052084991BILLINGRADACCTACCTSTARTTIMEDATE2014-10-222456953,164155096,904930551001BILLINGRADACCTACCTSTARTTIMEDATE2014-10-292456960,123321766,959166671011BILLINGRADACCTACCTSTARTTIMEDATE2014-11-062456968,359282418,235960651021BILLINGRADACCTACCTSTARTTIMEDATE2014-11-132456975,124224546,764942131031BILLINGRADACCTACCTSTARTTIMEDATE2014-11-192456981,054224545,931041BILLINGRADACCTACCTSTARTTIMEDATE2014-11-242456986,294050935,239826391051BILLINGRADACCTACCTSTARTTIMEDATE2014-11-302456992,162800935,868751061BILLINGRADACCTACCTSTARTTIMEDATE2014-12-082456999,725520837,56271991071BILLINGRADACCTACCTSTARTTIMEDATE2014-12-142457005,679537045,954016211081BILLINGRADACCTACCTSTARTTIMEDATE2014-12-202457012,312488436,632951391091BILLINGRADACCTACCTSTARTTIMEDATE2014-12-262457017,62307875,310590271101BILLINGRADACCTACCTSTARTTIMEDATE2015-01-012457023,66254636,03946761111BILLINGRADACCTACCTSTARTTIMEDATE2015-01-082457031,290613437,628067131121BILLINGRADACCTACCTSTARTTIMEDATE2015-01-152457038,121018526,830405091131BILLINGRADACCTACCTSTARTTIMEDATE2015-01-212457044,222361116,101342591141BILLINGRADACCTACCTSTARTTIMEDATE2015-01-282457051,188402786,966041671151BILLINGRADACCTACCTSTARTTIMEDATE2015-02-042457058,132418986,94401621161BILLINGRADACCTACCTSTARTTIMEDATE2015-02-112457064,954814826,822395841171BILLINGRADACCTACCTSTARTTIMEDATE2015-02-172457070,629282415,674467591181BILLINGRADACCTACCTSTARTTIMEDATE2015-02-222457076,330740745,701458331191BILLINGRADACCTACCTSTARTTIMEDATE2015-02-282457082,042025465,711284721201BILLINGRADACCTACCTSTARTTIMEDATE2015-03-062457088,106481486,064456021211BILLINGRADACCTACCTSTARTTIMEDATE2015-03-112457093,189027785,08254631221BILLINGRADACCTACCTSTARTTIMEDATE2015-03-152457097,204432874,015405091231BILLINGRADACCTACCTSTARTTIMEDATE2015-03-192457101,20714124,002708331241BILLINGRADACCTACCTSTARTTIMEDATE2015-03-242457106,11504634,90790511251BILLINGRADACCTACCTSTARTTIMEDATE2015-03-292457110,57942134,4643751261BILLINGRADACCTACCTSTARTTIMEDATE2015-04-032457116,024988435,445567131271BILLINGRADACCTACCTSTARTTIMEDATE2015-04-072457120,234745374,209756941281BILLINGRADACCTACCTSTARTTIMEDATE2015-04-112457124,240381944,005636571291BILLINGRADACCTACCTSTARTTIMEDATE2015-04-162457128,672037044,43165511301BILLINGRADACCTACCTSTARTTIMEDATE2015-04-192457132,480798613,808761571311BILLINGRADACCTACCTSTARTTIMEDATE2015-04-242457136,978379634,497581021321BILLINGRADACCTACCTSTARTTIMEDATE2015-04-282457141,096041674,117662041331BILLINGRADACCTACCTSTARTTIMEDATE2015-05-022457145,230347224,134305551341BILLINGRADACCTACCTSTARTTIMEDATE2015-05-072457149,543402784,313055561351BILLINGRADACCTACCTSTARTTIMEDATE2015-05-112457154,080763894,537361111361BILLINGRADACCTACCTSTARTTIMEDATE2015-05-152457158,210196764,129432871371BILLINGRADACCTACCTSTARTTIMEDATE2015-05-182457161,486122693,275925931381BILLINGRADACCTACCTSTARTTIMEDATE2015-05-222457165,104571763,618449071391BILLINGRADACCTACCTSTARTTIMEDATE2015-05-252457168,423460653,318888891401BILLINGRADACCTACCTSTARTTIMEDATE2015-05-292457172,037696763,614236111411BILLINGRADACCTACCTSTARTTIMEDATE2015-06-022457176,121400464,08370371421BILLINGRADACCTACCTSTARTTIMEDATE2015-06-062457180,090335653,968935191431BILLINGRADACCTACCTSTARTTIMEDATE2015-06-102457183,530532413,440196761441BILLINGRADACCTACCTSTARTTIMEDATE2015-06-132457187,232974543,702442131451BILLINGRADACCTACCTSTARTTIMEDATE2015-06-222457196,139745378,906770831461BILLINGRADACCTACCTSTARTTIMEDATE2015-06-262457200,029178243,889432871471BILLINGRADACCTACCTSTARTTIMEDATE2015-06-302457203,762083333,732905091481BILLINGRADACCTACCTSTARTTIMEDATE2015-07-042457208,195150464,433067131491BILLINGRADACCTACCTSTARTTIMEDATE2015-07-082457211,5581253,362974541501BILLINGRADACCTACCTSTARTTIMEDATE2015-07-112457214,836377313,278252311511BILLINGRADACCTACCTSTARTTIMEDATE2015-07-132457216,962256942,125879631521BILLINGRADACCTACCTSTARTTIMEDATE2015-07-162457219,78379632,821539361531BILLINGRADACCTACCTSTARTTIMEDATE2015-07-192457222,898194443,114398141541BILLINGRADACCTACCTSTARTTIMEDATE2015-07-222457226,303055563,404861121551BILLINGRADACCTACCTSTARTTIMEDATE2015-07-262457229,863634263,56057871561BILLINGRADACCTACCTSTARTTIMEDATE2015-07-302457233,750138893,886504631571BILLINGRADACCTACCTSTARTTIMEDATE2015-08-042457238,644664354,894525461581BILLINGRADACCTACCTSTARTTIMEDATE2015-08-082457243,11057874,465914351591BILLINGRADACCTACCTSTARTTIMEDATE2015-08-122457247,05129633,94071761601BILLINGRADACCTACCTSTARTTIMEDATE2015-08-162457250,936319443,885023141611BILLINGRADACCTACCTSTARTTIMEDATE2015-08-192457254,386805563,450486121621BILLINGRADACCTACCTSTARTTIMEDATE2015-08-232457258,138819443,752013881631BILLINGRADACCTACCTSTARTTIMEDATE2015-08-272457261,632685193,493865751641BILLINGRADACCTACCTSTARTTIMEDATE2015-08-302457265,241458333,608773141651BILLINGRADACCTACCTSTARTTIMEDATE2015-09-042457269,889942134,64848381661BILLINGRADACCTACCTSTARTTIMEDATE2015-09-072457273,246539353,356597221671BILLINGRADACCTACCTSTARTTIMEDATE2015-09-112457277,033645833,787106481681BILLINGRADACCTACCTSTARTTIMEDATE2015-09-162457282,161377315,127731481691BILLINGRADACCTACCTSTARTTIMEDATE2015-09-222457287,689039355,527662041701BILLINGRADACCTACCTSTARTTIMEDATE2015-09-252457291,07067133,381631951711BILLINGRADACCTACCTSTARTTIMEDATE2015-09-282457294,387476853,316805551721BILLINGRADACCTACCTSTARTTIMEDATE2015-10-032457298,640798614,253321761731BILLINGRADACCTACCTSTARTTIMEDATE2015-10-072457302,827731484,186932871741BILLINGRADACCTACCTSTARTTIMEDATE2015-10-102457306,348240743,520509261751BILLINGRADACCTACCTSTARTTIMEDATE2015-10-142457310,25339123,905150461761BILLINGRADACCTACCTSTARTTIMEDATE2015-10-182457314,226689813,973298611771BILLINGRADACCTACCTSTARTTIMEDATE2015-10-222457318,000104173,773414361781BILLINGRADACCTACCTSTARTTIMEDATE2015-10-252457321,12656253,126458331791BILLINGRADACCTACCTSTARTTIMEDATE2015-10-292457324,604907413,478344911801BILLINGRADACCTACCTSTARTTIMEDATE2015-11-012457327,989363433,384456021811BILLINGRADACCTACCTSTARTTIMEDATE2015-11-052457332,079849544,090486111821BILLINGRADACCTACCTSTARTTIMEDATE2015-11-082457335,44093753,361087961831BILLINGRADACCTACCTSTARTTIMEDATE2015-11-122457339,086631943,645694441841BILLINGRADACCTACCTSTARTTIMEDATE2015-11-162457342,808726853,722094911851BILLINGRADACCTACCTSTARTTIMEDATE2015-11-192457346,37718753,568460651861BILLINGRADACCTACCTSTARTTIMEDATE2015-11-232457350,269965283,892777781871BILLINGRADACCTACCTSTARTTIMEDATE2015-11-272457354,052210653,782245371881BILLINGRADACCTACCTSTARTTIMEDATE2015-12-012457357,501967593,449756941891BILLINGRADACCTACCTSTARTTIMEDATE2015-12-042457360,595277783,093310191901BILLINGRADACCTACCTSTARTTIMEDATE2015-12-072457364,195532413,600254631911BILLINGRADACCTACCTSTARTTIMEDATE2015-12-112457367,513587963,318055551921BILLINGRADACCTACCTSTARTTIMEDATE2015-12-142457371,29348383,779895841931BILLINGRADACCTACCTSTARTTIMEDATE2015-12-192457375,750960654,457476851941BILLINGRADACCTACCTSTARTTIMEDATE2015-12-232457379,97807874,227118051951BILLINGRADACCTACCTSTARTTIMEDATE2015-12-272457384,069050934,090972231961BILLINGRADACCTACCTSTARTTIMEDATE2015-12-312457388,067673613,998622681971BILLINGRADACCTACCTSTARTTIMEDATE2016-01-042457391,868680563,801006951981BILLINGRADACCTACCTSTARTTIMEDATE2016-01-082457396,147800934,279120371991BILLINGRADACCTACCTSTARTTIMEDATE2016-01-132457401,051550934,903752001BILLINGRADACCTACCTSTARTTIMEDATE2016-01-172457405,166157414,114606482011BILLINGRADACCTACCTSTARTTIMEDATE2016-01-222457409,810173614,64401622021BILLINGRADACCTACCTSTARTTIMEDATE2016-01-272457415,103541675,293368062031BILLINGRADACCTACCTSTARTTIMEDATE2016-02-012457420,289282415,185740742041BILLINGRADACCTACCTSTARTTIMEDATE2016-02-062457424,795023154,505740742051BILLINGRADACCTACCTSTARTTIMEDATE2016-02-102457429,351736114,556712962061BILLINGRADACCTACCTSTARTTIMEDATE2016-02-152457433,938819444,587083332071BILLINGRADACCTACCTSTARTTIMEDATE2016-02-192457437,928645833,989826392081BILLINGRADACCTACCTSTARTTIMEDATE2016-02-232457442,054675934,12603012091BILLINGRADACCTACCTSTARTTIMEDATE2016-02-272457446,184675934,132101BILLINGRADACCTACCTSTARTTIMEDATE2016-03-022457450,376527784,191851852111BILLINGRADACCTACCTSTARTTIMEDATE2016-03-062457454,460613434,084085652121BILLINGRADACCTACCTSTARTTIMEDATE2016-03-112457459,224155094,763541662131BILLINGRADACCTACCTSTARTTIMEDATE2016-03-162457464,071215284,847060192141BILLINGRADACCTACCTSTARTTIMEDATE2016-03-212457468,975844914,904629632151BILLINGRADACCTACCTSTARTTIMEDATE2016-03-262457474,320138895,344293982161BILLINGRADACCTACCTSTARTTIMEDATE2016-03-312457478,569131944,248993052171BILLINGRADACCTACCTSTARTTIMEDATE2016-04-042457483,079293984,510162042181BILLINGRADACCTACCTSTARTTIMEDATE2016-04-082457487,219490744,140196762191BILLINGRADACCTACCTSTARTTIMEDATE2016-04-122457491,195069443,97557872201BILLINGRADACCTACCTSTARTTIMEDATE2016-04-162457495,182418983,987349542211BILLINGRADACCTACCTSTARTTIMEDATE2016-04-202457499,190914354,008495372221BILLINGRADACCTACCTSTARTTIMEDATE2016-04-252457504,052974544,862060192231BILLINGRADACCTACCTSTARTTIMEDATE2016-04-302457508,98254634,929571762241BILLINGRADACCTACCTSTARTTIMEDATE2016-05-042457513,46004634,47752251BILLINGRADACCTACCTSTARTTIMEDATE2016-05-092457518,22218754,76214122261BILLINGRADACCTACCTSTARTTIMEDATE2016-05-142457522,853553244,631365742271BILLINGRADACCTACCTSTARTTIMEDATE2016-05-182457527,462060194,608506952281BILLINGRADACCTACCTSTARTTIMEDATE2016-05-232457531,911145834,449085642291BILLINGRADACCTACCTSTARTTIMEDATE2016-05-272457536,168738434,25759262301BILLINGRADACCTACCTSTARTTIMEDATE2016-06-012457541,260219915,091481482311BILLINGRADACCTACCTSTARTTIMEDATE2016-06-072457547,384131946,123912032321BILLINGRADACCTACCTSTARTTIMEDATE2016-06-142457553,861944446,47781252331BILLINGRADACCTACCTSTARTTIMEDATE2016-06-212457561,433757,571805562341BILLINGRADACCTACCTSTARTTIMEDATE2016-06-292457569,233865747,800115742351BILLINGRADACCTACCTSTARTTIMEDATE2016-07-052457574,83276625,598900462361BILLINGRADACCTACCTSTARTTIMEDATE2016-07-102457579,675138894,842372692371BILLINGRADACCTACCTSTARTTIMEDATE2016-07-142457584,068090284,392951392381BILLINGRADACCTACCTSTARTTIMEDATE2016-07-182457588,227048614,158958332391BILLINGRADACCTACCTSTARTTIMEDATE2016-07-232457592,511678244,284629632401BILLINGRADACCTACCTSTARTTIMEDATE2016-07-292457599,213634266,701956022411BILLINGRADACCTACCTSTARTTIMEDATE2016-08-052457605,97879636,765162042421BILLINGRADACCTACCTSTARTTIMEDATE2016-08-112457612,232824076,254027772431BILLINGRADACCTACCTSTARTTIMEDATE2016-08-172457617,586840285,354016212441BILLINGRADACCTACCTSTARTTIMEDATE2016-08-222457622,549965284,9631252451BILLINGRADACCTACCTSTARTTIMEDATE2016-08-272457628,259282415,709317132461BILLINGRADACCTACCTSTARTTIMEDATE2016-09-012457633,265162045,005879632471BILLINGRADACCTACCTSTARTTIMEDATE2016-09-062457637,568113434,302951392481BILLINGRADACCTACCTSTARTTIMEDATE2016-09-092457641,134351853,566238422491BILLINGRADACCTACCTSTARTTIMEDATE2016-09-122457644,471898153,33754632501BILLINGRADACCTACCTSTARTTIMEDATE2016-09-162457648,109826393,637928242511BILLINGRADACCTACCTSTARTTIMEDATE2016-09-232457655,011851856,902025462521BILLINGRADACCTACCTSTARTTIMEDATE2016-10-012457662,819965287,808113432531BILLINGRADACCTACCTSTARTTIMEDATE2016-10-082457669,879803247,059837962541 За исключением первой строки в остальном довольно равномерно. Мне кажется, что дело тут не в индексах. Если в select я указываю *, то запрос отрабатывает быстро. Если в select я указываю какое-то поле (любое, хоть C.CUSTOMER_ID, хоть R.RADACCTID), то запрос выполняется очень долго (его завершения я не дождался). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2016, 10:30 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Решил дождаться выполнения запроса, запрос выполнялся почти 7 минут. Трассировка: Код: plaintext 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. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2016, 11:30 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., выполни это и перепроверь: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2016, 13:16 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Все как-то само исправилось, статистику я не трогал. Сейчас запрос отрабатывает достаточно быстро. Код: 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. Теперь мне этот запрос нужно дополнительно отфильтровать. Добавляю: Код: plsql 1. и запрос выполняется очень долго. Например для периода в 4 суток запрос выполняется 100мс (в выборке около 6к строк, все записи фетчатся около секунды), а если добавляю условие по CA.VALUE, то этот же запрос выполняется уже 20 минут и я никак не получу статистику. В чем причина по explain plan я понять не могу — там есть TABLE ACCESS FULL TABLE BM_CUSTOMER_CONTACT, но это не такая уж и большая таблица. Explain plan Код: plaintext 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. При этом поле BM_CUSTOMER_CONTACT.VALUE проиндексировано (составной индекс по полям CONTACT_DICT_ID,VALUE), а в :address символ процента указывается только в конце (:address='улица%'). То есть на мой взгляд индекс должен использоваться. Можно ли тут что-нибудь сделать? Если заменить left join на объединение через union нескольких запросов, это поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 10:40 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Перенес условие в JOIN: Код: plsql 1. Теперь запрос отрабатывает моментально. Видимо оптимизатор такое не распознал и индекс не задействовал. У меня SQL-запрос формируется динамически и мне было бы проще в тех случаях, когда фильтрация по CA.VALUE не нужна, просто указывать :address='%' (вместо того, чтобы убирать из JOIN это условие). Это очень плохо? По скорости отработки запросов особой разницы я не заметил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 11:11 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Мда, поспешил. Запрос отрабатывает быстро, но не фильтруется. А если добавить в WHERE критерий CA.VALUE is not null, то запрос снова выполняется долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 11:35 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Последняя версия запроса: Код: 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. Закомментированные строки в конце — это фильтры, которые можно применять дополнительно. Запрос работает быстро, за исключением последнего фильтра (:address). Как только его раскомментирую, запрос выполняется очень долго. Подскажите, как задать критерий отбора по CA.VALUE, чтобы работало быстрее? В BM_CUSTOMER_CONTACT есть составной индекс по полям CONTACT_DICT_ID,VALUE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 13:01 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., Если можешь, делай like 'x%' вместо '%x%', тогда будет индекс задействован по range scan, если он есть конечно на адрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 13:15 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Я его именно так и делаю. Если вложенную таблицу убрать, то индекс используется. А с ним почему-то не используется (или используется, но на времени выполнения это не ощущается). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 14:14 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Что значит или? план где? В плане же видно используется или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 14:45 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Запрос выполняется очень долго, его завершения я не дождался. Explain выглядит так: Код: plaintext 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. В таблице BM_CUSTOMER_CONTACT есть следующие индексы: UNIQUE INDEX CUSTOMER_CONTACT_PK ON BM_CUSTOMER_CONTACT (CUSTOMER_CONTACT_ID) INDEX CUSTOMER_CONTACT_IDX ON BM_CUSTOMER_CONTACT (CUSTOMER_ID, CONTACT_DICT_ID) INDEX CUSTOMER_CONTACT_VAL_IDX ON BM_CUSTOMER_CONTACT (CONTACT_DICT_ID, UPPER("VALUE")) И похоже что CUSTOMER_CONTACT_VAL_IDX не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 15:28 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., Код: plsql 1. Если таблице дан элиас то в хинте необходимо указывать его а не имя таблицы: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 15:42 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., В индексе Код: plsql 1. В запросе Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 16:21 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
SYЕсли таблице дан элиас то в хинте необходимо указывать его а не имя таблицы: Исправил. nimadВ индексе Код: plsql 1. Я почему-то считал, что like регистронезависимый. Исправил, указал upper(CA.VALUE) like upper(:address). План поменялся: Код: plaintext 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. Даже INDEX RANGE SCAN для CUSTOMER_CONTACT_VAL_IDX появился. Но запрос по прежнему отрабатывает очень долго. Сейчас поэкспериментирую, мне кажется, что дальше я уже разберусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 17:00 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
SYЕсли таблице дан элиас то в хинте необходимо указывать его а не имя таблицы: Странно, стало намного хуже. Без хинтов запрос выполняется полторы минуты, с хинтами за полчаса не завершился. Оставил только USE_NL(S B R T), он вроде бы дает положительный эффект. А LEADING и INDEX убрал. В LEADING определяется порядок соединений и по идее LEADING(S B R) должен помогать, но видимо я неправильно понимаю идею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 18:04 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Чем дальше, тем меньше понимаю. Есть запрос, выполняемый веб-приложением (скриптом на PHP). Запрос возвращает несколько строк (не более пары десятков). Выполняется очень долго, веб-сервер закрывает скрипт по таймауту. Код: 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. Этот же запрос я сегодня запускал в TOAD — в первый раз он выполнялся около полутора минут, в следующие разы отрабатывал быстро (секунды), даже если я изменял некоторые параметры. Затем я этот же запрос запустил в SQL*Plus, предварительно задав параметры (такие же как на сайте и в TOAD): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. С сайта запрос по прежнему выполнялся очень долго (точнее его прерывал сервер по таймауту). Сейчас решил снова проверить, запустил его в SQL*Plus — и он выполняется уже почти 10 минут. Запустил его же в TOAD, с теми же параметрами — запрос выполнился за 31 секунду. Повторные запуски — около 400мс. Остановил запрос в SQL*Plus (прошло более 10 минут, он так и не завершился). Запустил его еще раз, прошло уже минуты четыре, а он так и не завершился. Почему в TOAD запрос выполняется быстро? Даже если изменять параметры (:ip или :address), время выполнения не превышает десятка секунд. Почему в SQL*Plus днем он выполнялся быстро, а сейчас долго? SQL*Plus один и тот же, на одной и той же машине (она же сервер СУБД), никаких настроек или окружение среды я не изменял (да и не умею). Почему из PHP (используется библиотека OCI) запрос выполняется долго? В PHP я первоначально использовал хинт RESULT_CACHE, но я пробовал его убирать, ничего не менялось. Вот текущий план из TOAD: Код: plaintext 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. С SQL*Plus план срисовать не смог, из-за переноса строк он совершенно нечитаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 22:47 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.С SQL*Plus план срисовать не смог, из-за переноса строк он совершенно нечитаем. А что SET LINESIZE отменили? Начни с проcтого. Просмoтри LEFT JOIN. Какой смысл в аутер джойнах типа: Код: plsql 1. 2. Когда в WHERE стоит: Код: plsql 1. 2. Или: Код: plsql 1. 2. Когда в WHERE стоит: Код: plsql 1. 2. Зачем два раза джойн с SERVICES? Почему бы не: Код: 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. Да и "в первый раз он выполнялся около полутора минут, в следующие разы отрабатывал быстро (секунды)" - данные поле первого выполнения остаются в buffer cache. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2016, 23:36 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
SYКакой смысл в аутер джойнах типа: Код: plsql 1. 2. Это в первом запросе (до union), с ним вообще никаких проблем нет. SQL формируется динамически и мне удобнее, когда тело запроса постоянное и я только добавляю ограничения в WHERE. Во втором запросе (после union) от внешних соединений попробую избавиться. SYЗачем два раза джойн с SERVICES? Почему бы не: Смысл в SERVICES.TYPE_ID=14. Записи в таблице RADACCT формируются только из SERVICES.TYPE_ID=14. Но записи в таблице BM_SERVICE_MONEY могут быть для любого SERVICES.TYPE_ID. И SERVICES.TYPE_ID!=14 гораздо больше, чем SERVICES.TYPE_ID=14. Я таким образом хотел упростить наиболее "тяжелое" соединение самых больших таблиц RADACCT и BM_SERVICE_MONEY. Попробую убрать внутреннее соединение с SERVICES, возможно оптимизатор Oracle лучше меня с этим разберется. SYДа и "в первый раз он выполнялся около полутора минут, в следующие разы отрабатывал быстро (секунды)" - данные поле первого выполнения остаются в buffer cache. Про кеширование после первого выполнения я предполагал. Возможно что и план запроса кешируется. Но все равно мне непонятно, почему один и тот же запрос с одними и теми же входными параметрами и в одной и той же среде днем и вечером выполняется разное время. Даже в TOAD, вчера днем повторные запросы (после первого запуска) отрабатывали 1-2 секунды, а вечером повторные запросы отрабатывали 400мс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 09:11 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Убрал left join (заменил на обычный join), убрал из запроса пару таблиц. Выполнил запрос в TOAD, запрос вернул около десятка строк, в первый раз выполнялся 600мс, в следующие разы выполнялся около 400мс. Запустил этот же запрос в SQL*Plus, запрос выполнялся более 10 минут, затем я его прервал. Затем попробовал запустить запрос в TOAD — и он висит уже более 5 минут. Это может быть из-за блокировок? Запросы из этой темы блокировок не показывают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 10:39 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо за советы, вроде бы удалось добиться быстрой работы. Второй подзапрос (после union) теперь выглядит так: Код: 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. В TOAD этот запрос выполняется достаточно быстро, в SQL*Plus тоже. План выглядит так: Код: plaintext 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. Но из PHP-скрипта этот запрос по прежнему выполняется долго. Как можно выяснить, в чем причина? Различные настройки окружения и сессии? И как убедиться, что на результаты не влияет кеширование? Я выполнял команды: Код: plaintext 1. 2. Можно считать, что это чистый результат, без влияния кеширования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 11:36 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., 1. план от client tool не зависит. 2. оптимайзер достаточно умен чтобы проверять CA.CONTACT_DICT_ID = 3 один раз так-что незачем его тестировать : Код: plsql 1. 2. 3. 4. 5. 3. убери хинты и проверь план и время выполнения. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 13:40 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Так хинты выключены (я убрал плюс). Или речь про RESULT_CACHE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 13:48 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., Код: plsql 1. 2. 3. 4. 5. Напрашивается добавить поле FRAMEDIPADDRESS к индексу RADACCT_ACCTSTARTTIME_IDX (хотя estimated плану на 100% доверять нельзя). SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 13:53 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Убрал все хинты: Код: plaintext 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. Кстати, если условие проверки на :address убрать, то PHP-скрипт результаты отображает довольно быстро. А с дополнительной проверкой на :address (в которой задействован индекс) выполняется долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 13:58 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
SYНапрашивается добавить поле FRAMEDIPADDRESS к индексу RADACCT_ACCTSTARTTIME_IDX (хотя estimated плану на 100% доверять нельзя). В таблице RADACCT за 100М записей, я бы не хотел добавлять в нее индекс без особой необходимости. Кроме того, если в запросе задается только эта проверка: Код: plsql 1. 2. 3. то запрос выполняется быстро (в том числе в PHP-скрипте). А вот когда я к нему добавляю Код: plsql 1. то он выполняется долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:01 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.Так хинты выключены (я убрал плюс). Или речь про RESULT_CACHE? Не заметил + убран в хинтe NL. А что тут дает RESULT_CACHE? В плане не вижу ни Код: plsql 1. ни: Код: plsql 1. 2. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:04 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Вот план без проверки на :address (только с :ip) Код: plaintext 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. SYА что тут дает RESULT_CACHE? Версии: Oracle Database 10g Release 10.2.0.4.0 - 64bit Production PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production Возможно в моей версии этот хинт недоступен или отключен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:08 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B., Я не предлагал новый индекс. Я педлагал добавить поле к существующему. Тогда отпадет необходимость в TABLE ACCESS BY INDEX ROWID. Насчет "А вот когда я к нему добавляю" - зачем добавлять условие CA.CONTACT_DICT_ID = 3 дважды - один раз в ON а торой раз в WHERE? Масло масляное? Контроьный выстрел? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:09 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.Возможно в моей версии этот хинт недоступен или отключен. Query result cache появился, если не ошибаюсь, в 11g. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:14 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
SYЯ педлагал добавить поле к существующему. Но в системе часто требуется быстрый доступ по ACCTSTARTTIME (без учета FRAMEDIPADDRESS). Или в этом случае составной индекс тоже будет использоваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:18 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.Но в системе часто требуется быстрый доступ по ACCTSTARTTIME (без учета FRAMEDIPADDRESS). Или в этом случае составной индекс тоже будет использоваться? Будет, разве-что FRAMEDIPADDRESS очень длинноe поле, хотя судя по имени это IP адрес. В любом случае тестировать всeгда надо. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 14:48 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Ок, буду иметь ввиду этот способ, как запасной. А как мне найти причину, почему один и тот же запрос, с одними и теми же параметрами в TOAD выполняется быстро, а в PHP-скрипте долго? Я подсунул в PHP-скрипт explain plan, получил такой результат: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 16:00 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Оказывается дело не совсем в скрипте. В PHP выполняется такой запрос: Код: plsql 1. 2. 3. 4. 5. 6. То есть два запроса, соединенных через union all и отсортированных. В TOAD этот составной запрос выполняется быстро, также как по отдельности запрос1 и запрос2. В PHP-скрипте каждый запрос по отдельности выполняется быстро, даже если он обернут во внешний запрос с сортировкой (то есть select * from (запрос1) order by ...). А вот составной запрос в PHP-скрипте выполняется долго. Из-за чего может быть такое поведение? Вот план составного запроса при выполнении его в PHP-скрипте: Код: plaintext 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. В TOAD план точно такой-же (специально сохранял два плана в текстовые файлы и сравнивал). Но в TOAD запрос отрабатывает быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 16:31 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.Но в TOAD запрос отрабатывает быстро. Toad выдает на гора первые строки результата, пoсему и может казаться бысто. Ты в Toad'e нажми пимпочку "до упора", вот тогда и узнаешь полное время всех fetch'ей. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:46 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Конкретно в последнем запросе возвращалось около десятка строк, так что дело точно не в этом (TOAD загружает по 500 строк). Ну и в случае PHP-скрипта запрос у меня выполняется дважды — первый раз select count(*) from <sql> (чтобы посчитать число строк), второй раз select *, rn from (select *, rownum rn from <sql> where rownum<=...) where rn>=... (чтобы отобразить выбранную страницу). До второго раза PHP-скрипт не доходит, зависает на select count(*), в котором возвращается только одна строка. Подобные побочные эффекты могут быть из-за union all? Или причина точно не в этом? В крайнем случае я завтра попробую обойтись без union, выполняя запросы отдельно и объединяя результаты уже на клиентской стороне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 22:12 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Так добaвь COUNT(*) OVER() cnt к select list и первый-же фетч покажет число строк. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 03:19 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Спасибо, не знал про такое, так действительно проще. У меня еще такой вопрос. Есть запрос с такой строкой: Код: plsql 1. Запрос возвращает около десятка строк, выполняется моментально. PA.MOMENT проиндексирован. Если сделать так: Код: plsql 1. то запрос выполняется 10-15 секунд, возвращает пару десятков строк. CB.CHANGED не проиндексирован. В таблице PA строк много, в таблице CB строк меньше тысячи. Может быть такая разница из-за того, что CB.CHANGED неиндексирован? Или нужно изучать план выполнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 12:27 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.В таблице PA строк много, в таблице CB строк меньше тысячи. Всего в PA порядка 1М строк. Для фильтра trunc(PA.MOMENT) = trunc(sysdate) около 1-2 тысяч строк. Для фильтра PA.MOMENT > CB.CHANGED около 3-5 тысяч строк (CB.CHANGED очень редко отстает от текущей даты больше чем на несколько дней). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 12:31 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B. Код: plsql 1. Запрос возвращает около десятка строк, выполняется моментально. PA.MOMENT проиндексирован.Где-то ты врёшь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 15:37 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
А зачем мне врать, спрашивая совета на форуме? Запрос выполняется 80мс, я считаю это моментальным. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 16:48 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
PA это BM_PERIODIC_ACCT. DDL такой: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 16:57 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Alibek B.А зачем мне врать, спрашивая совета на форуме?Потому что маловероятно, что ты никак не можешь догнать, что моментальная проиндексированность никакой погоды не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 17:34 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Я как-бы о другом говорил. Поскольку PA.MOMENT проиндексировано, то условие PA.MOMENT > CB.CHANGED должно использовать индекс и не должно быть причиной долгого выполнения запроса. Поэтому причиной долгого выполнения запроса при условии PA.MOMENT > CB.CHANGED должно быть не отсутствие индексов (для PA.MOMENT или CB.CHANGED), а что-то другое. Но мне непонятно, что это может быть, если при условии trunc(PA.MOMENT) = trunc(sysdate) запрос выполняется моментально, кардинальность в обоих вариантах различается не так уж и сильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2016, 19:08 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
ElicAlibek B. Код: plsql 1. Запрос возвращает около десятка строк, выполняется моментально. PA.MOMENT проиндексирован.Где-то ты врёшь.Ну почему же С некоторых версий нормально юзает индекс по дате при TRUNC (INDEX FULL SCAN) А с использованием Transitive Closure (с 10.2, вроде) может юзать CHECK констрэйнты и использовать нормальный IRS Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2016, 08:10 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровНу почему жеЗдесь и по духу, и по факту не тот случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2016, 08:43 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровElicпропущено... Где-то ты врёшь.Ну почему же С некоторых версий нормально юзает индекс по дате при TRUNC (INDEX FULL SCAN) А с использованием Transitive Closure (с 10.2, вроде) может юзать CHECK констрэйнты и использовать нормальный IRS Слишком притянуто за уши ) Первый случай чистый подлог, использующий факт нахождения всех нужных данных в индексе. Во втором случае фокус не работает с bind. К запросу ТС это не имеет отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2016, 11:53 |
|
||
|
Подскажите, как правильно составить запрос, чтобы эффективно использовались индексы
|
|||
|---|---|---|---|
|
#18+
Да нет, конечно Мне просто показалось, что Elic намекает на то, что в данном случае индекс не будет использован (каюсь, смотрел только на заголовок темы, в тонкости не вникал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2016, 13:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1887083]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
138ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 417ms |

| 0 / 0 |
