|
|
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
hi all LI-T3.0.0.31003 Код: plaintext 1. 2. 3. 4. В таблице 1 млн записей. Вот объясните мну, плз, почему запрос: Код: plaintext - имеет план, посылающий в сад индекс PK: Код: plaintext 1. 2. 3. 4. 5. 6. 7. И соотв-щую статистику: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 12:43:12 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, с чего ты решил что здесь уместно использовать индекс? Есть примеры в других СУБД, где он используется на том же самом запросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 12:48:42 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Денисс чего ты решил что здесь уместно использовать индекс? Мне трудно понять, почему в этом случае нельзя использовать индекс. Мы же запрашиваем базу: дай строку, которая будет СЛЕДУЮЩЕЙ по возрастанию ID. А этот самый ID, так уж сложилось, есть PK. Ну так почему нельзя юзать его ? Симонов ДенисЕсть примеры в других СУБД, где он используется на том же самом запросе?Дык... Код: 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. PS. Проще говоря, я не понимаю, почему оконная функция в вышеприведенном примере не работает так, как: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:16:21 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, 1. rownum<=5 это нифига не тоже самое что rows 5 2. Для order by где бы он не находился не всегда эффективней использовать индекс. Обычно он там вредит, если необходимо сделать полную выборку, а не только первые строки. Вот когда появляется rows, то навигация по индексу может оказаться эффективней, но это зависит от фактора кластеризации и отношения того что указано в rows к общему количеству строк. Думаю что конкретно в этом случае индекс всё же можно было задействовать. Сейчас оконные функции всегда буферизируют весь рекорсет и не прерываются когда ... over(order by id) ... rows ... уже удовлетворяют условиям. Грубо говоря сначала всю выборку запихивают в буфер, а потом только выполняют над ней манипуляции в том числе и сортировки. В таком случае использовать индекс не возможно/не эффективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:32:43 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Денис1. rownum<=5 это нифига не тоже самое что rows 5да, вот так правильнее: Код: plaintext Код: 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. Симонов ДенисСейчас оконные функции всегда буферизируют весь рекорсет и не прерываются когда ... over(order by id) ... rows ... уже удовлетворяют условиям.Угу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:40:13 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоидимеет план, посылающий в сад индекс PK: Потому что при плане не посылающем в сад этот индекс он вернёт совсем другой результат. А делать Nested Loop оконные функции не умеют. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:48:02 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
ТаблоидКстати, орацле и в случае полной выборки попрёт по индексу это наверное потому, что он покрывающий или кластерный (IOT) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:48:32 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Денискогда появляется rows, то навигация по индексу может оказаться эффективней, но это зависит от фактора кластеризации и отношения того что указано в rows к общему количеству строк.Пока что вижу, что навигация эта ВСЕГДА эффективнее. Вот вариант полной выборки курсором: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. И статистика по нему: Код: plaintext 1. 2. 3. 4. 5. 6. А вот вариант выборки через lead()over(): Код: sql 1. И статистика: Код: plaintext 1. 2. 3. 4. 5. 6. "Классика жанра": число фетчей в полтора раза больше (в вырбоке курсором), а время - настолько же меньше :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:53:28 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТаблоидимеет план, посылающий в сад индекс PK:Потому что при плане не посылающем в сад этот индекс он вернёт совсем другой результат.Какой именно ? На трёх строках покажи плз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:54:40 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисТаблоидКстати, орацле и в случае полной выборки попрёт по индексуэто наверное потому, что он покрывающий или кластерный (IOT)Нет, я таблицу создавал как обычную. Никакого кластера или IOT. Просто он "так" умеет (бегать только по индексу - index full scan, а иногда и index fast full scan) а мы, к сож-ю, - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:56:33 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, не сравнивай разное. Выгодней ли навигация надо проверять по другому вот с чем надо сравнивать когда нет навигации Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. да и не забывай жмакать fetch all ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 13:56:49 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, да и ещё одно. Я думаю что текущая реализация ближе к объявлению двунаправленного курсора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:02:30 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Денисвот с чем надо сравнивать когда нет навигации Код: plsql 1. Этим ты сравнишь курсор против вышеприведенного селекта, и оба они будут идти натуралом и сортировку делать (PLAN SORT (T NATURAL)). Где тут вообще навигация и как тогда понять, выгоднее ли она ? :-) Симонов Денисда и не забывай жмакать fetch allОга. Только в isql нет такой кнопки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:04:23 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
ТаблоидЭтим ты сравнишь курсор против вышеприведенного селекта, и оба они будут идти натуралом и сортировку делать я имел в виду сравнить блоки между собой, а не с оконной функцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:06:20 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
ТаблоидЭтим ты сравнишь курсор против вышеприведенного селекта, и оба они будут идти натуралом и сортировку делать (PLAN SORT (T NATURAL)).И мну не хотелось бы никого расстраивать, но даже в этом случае курсор уделывает lead()over(): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:09:21 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Денися имел в виду сравнить блоки между собой, а не с оконной функцией.natural оказался быстрее: Код: 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. 1-е место = твой вариант execute block'a, который с натуралом + сортировкой (3.25 сек) 2-е место = вариант с execute block'a с навигацией по индексу (и отстает, кстати, ненамного от 1-го: 4.0 сек) 3-е место = вариант с оконной функцией (6 сек). А на него столько надежд было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:15:29 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, а теперь сделай курсор двунаправленным Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:29:55 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид2-е место = вариант с execute block'a с навигацией по индексу (и отстает, кстати, ненамного от 1-го: 4.0 сек) небось ID распределены равномерно да и добавлялись по возрастанию, т.е фактор кластеризации хороший ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:41:01 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Дениса теперь сделай курсор двунаправленнымСделал. Получил 3.4 сек против прежних 4.1: Код: 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. Не, я не против, конечно. Только когда настанет время рулёжа оконных функций-то ?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:49:04 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Дениснебось ID распределены равномерно да и добавлялись по возрастанию, т.е фактор кластеризации хорошийСправочники в продакшенах почти всегда имеют монотонно возрастающие ID. "Таблицы фактов" - не всегда, но в них львиная доля записей тоже подчиняется этой эмпирике. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:51:12 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, ну вообще то он не совсем эквивалентен. Да и ещё одно двунаправленный курсор всегда делает сразу фетч всех записей, т.е. буфферизирует их. ТаблоидНе, я не против, конечно. Только когда настанет время рулёжа оконных функций-то ?.. когда количество order by увеличиться, например, станет разнонаправленными или по разным полям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:53:29 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Дениснебось ID распределены равномерно да и добавлялись по возрастанию, т.е фактор кластеризации хорошийКогда ID добавляются "задом наперёд": Код: plaintext 1. 2. 3. 1. Однонаправленный курсор, с навигацией: 5090 ms Код: 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. 2. Двунаправленный курсор с навигацией: 4279 ms Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 3. Однонаправленный курсор БЕЗ навигации: 3760 ms Код: 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. 4. Двунаправленный курсор БЕЗ навигации: 4061 ms Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 5. Оконная функция: 6522 ms Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 15:06:12 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Симонов Денискогда количество order by увеличиться, например, станет разнонаправленными или по разным полямда как-то опять не сильно бросилось в глаза... Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 15:14:43 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#18+
Таблоид, Код: sql 1. 2. 3. 4. 5. я имел ввиду вот такой случай. Его уже за один селект в блоке не сделаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 15:29:36 |
|
||
|
И снова об использовании оконными ф-циями индексов
|
|||
|---|---|---|---|
|
#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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 16:05:11 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=100&tid=1563761]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 390ms |

| 0 / 0 |
