|
SELECT ... FROM /*NESTED TABLE */ TABLE (CAST(..)) vs Перебор по массиву.
|
|||
---|---|---|---|
#18+
Вопрос для тех, кто использует таблицы объектов (Local Collections) на PL/SQL. Чегото не понравилось мне по скорости как все это работает. Простой перебор получается эффективнее. Вот такой базовай пример: Код: 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.
Раскомментируем оба комментария и убеждаемся, что 2 цикла дают одинаковые результаты, то есть алгоритм работает корректно. Далее меняем струку в блоке DEFINE: MaxLoops$ NUMBER(10) := 500; на MaxLoops$ NUMBER(10) := 20000; Даем комманду: Код: plaintext
чтобы смотреть как все это небыстро (быстро) работает. Раскомментируем первый цикл (и убираем не нужные DBMS_OUTPUT-ы), засекаем время. У меня для первого цикла где используются SELECT-ы по коллекциям выходит ~10 сек. Далее: Комментируем первый FOR-LOOP, раскомментируем второй. Время - ~5 сек. Вывод: фрагмент с SELECTом работает в 2 раза медленнее тупого перебора с помощью циклов. А казалось бы, должно все быть наоборот. Ан нет. Да, первый фрагмент удобнее. Но барал я удобство, мне важна производительность. Либо я чтото не так делаю и тд и тп. Господа ораклисты, объясните что здесь не так. Заранее благодарен. PS: Платформа - Win2000AdvServer+ORACLE8.1.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2002, 19:05 |
|
|
start [/forum/topic.php?fid=52&fpage=2839&tid=1993000]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 146ms |
0 / 0 |