|
|
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
Добрый день! Как ускорить выборку данных из большой таблице по не индексированной колонке? SELECT COUNT (PK) COUNT_VSEGO, COUNT (CASE WHEN COLUMN_NAME = 'TEST' THEN PK END) COUNT_PO_COLUMN FROM TABLE COUNT_VSEGO = 59 000 000 COUNT_PO_COLUMN = 38 000 Индекс создать не можем, база не наша. Примерный весь запрос выглядит так WITH TAB AS (SELECT /*+ materialize*/ PK, COLUMN_1, COLUMN_2, COLUMN_3, FROM TABLE WHERE COLUMN_5 = 'TEST' ) Далее TAB используется в нескольких соединения. Если создать таблицу CREATE TAB AS SELECT PK, COLUMN_1, COLUMN_2, COLUMN_3, FROM TABLE WHERE COLUMN_5 = 'TEST' , затем использовать его в основном запросе все летает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 13:48 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
amireyevКак ускорить выборку данных из большой таблице по не индексированной колонке?Продать душу дьяволу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 13:58 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
Elic, )))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 14:12 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
amireyevЕсли создать таблицу CREATE TAB AS SELECT ...... , затем использовать его в основном запросе все летает. matealized view refresh on demand? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 14:56 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
таблицу можно - индекс нельзя?, - Таблицу создаю под другим пользователем. CREATE MATERIALIZED VIEW TES AS SELECT * FROM DUAL [Error] ORA-01031: insufficient privileges (1: 0): ORA-01031: insufficient privileges ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 15:07 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
amireyev Таблицу создаю под другим пользователем. А индекс можно тоже под другим создать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 19:08 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
Добрый день. Самая быстрая обработка в там случае будет через BULK COLLСT ваши данные из таблицы будет загружены "как они есть" после чего с курсору можно будет обращаться как угодно. Мы используем данный подход когда уже индексы и result cash не помогают. Единственное конечно все вычисление придется писать через алгоритмы и циклы. MyTABLE - ваша таблица без индексов. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 15:36 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
pamibol, авторМы используем данный подход когда уже индексы и result cash не помогают. Т.е. вы считаете, что ваши алгоритмы обработки на PL круче того, что написали разработчики оракл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 15:42 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
Нет. Но разработчики нам и дали BULK COLLECT для этих целей. Я думаю, что если запустить на запрос анализатор через EM то будет предложено создать индекс или новый план создать и запрос будет летать (возможно). Но в данной ситуации сделать этого нет возможности по этому приходится писать такой код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 15:57 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
pamibolНо разработчики нам и дали BULK COLLECT для этих целей. Круто. Сдернуть в PGA 59 000 000 вместо 38 000 и "обработать в цикле" - это, безусловно, гениальная идея. amireyevCOUNT_VSEGO = 59 000 000 COUNT_PO_COLUMN = 38 000 2ТС: если на таблицу есть не только select, но еще и references - то можно создать индекс по "чужой" таблице и в своей схеме. Создание мат. представления требует дополнительных привилегий - обсуждайте с dba, тем более что fast refresh потребует создания mview log, а вариация on commit - вообще зверь специфический в плане нагрузки на "чужую" систему. Если вариант с индексом или mview не проходит - то можете несколько ускорить FTS, увеличив на уровне сессии db_file_multiblock_read_count. Кроме того, если есть запас по вводу-выводу - то для ускорения FTS можно использовать parallel или даже замахнуться на dbms_parallel_execute, если применимо и не пугают побочные эффекты. С учетом amireyevДалее TAB используется в нескольких соединения. материализация выглядит разумно, но она идет в temporary tablespace - тут имеет смысл уточнить, нет ли конкуренции за TEMP, и если есть показания, то попробовать продавить персональное temporary tablespace на наименее загруженном контроллере. Далее следуют решения уже архитектурного порядка и обсуждать их абстрактно смысла не имеет. Закончить обзор вариантов можно рассмотрением переезда на exadata с ее storage indexes - неплохо ускоряет именно ваш сценарий... Правда, smart scan не очень хорошо дружит с компрессией, то то такое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 16:30 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
pamibolНет. Но разработчики нам и дали BULK COLLECT для этих целей. Я думаю, что если запустить на запрос анализатор через EM то будет предложено создать индекс или новый план создать и запрос будет летать (возможно). Но в данной ситуации сделать этого нет возможности по этому приходится писать такой код. Гениально . Тебe надо оформить заявку на патент инновационнoгo методa учета товаров где учетчик будет сидеть в кабинете а не на складе и для учета товар будет со склада пересылаться в кабинет учетчика. Ибо это примерно то что ты предлагаешь. И как ты думаешь сколько будет стоить пересылка товара со скада в кaбинет? И какого размера этот кaбинет должен быть (ладно, товар можно присылать частями - bulk collect limit), но нафига ящики (rows) открывать для подсчета ящикoв? COUNT(*) (без индекса) ползет по блокам таблицы и все что он читает в блoке это Row Directory - Row Data COUNT(*) по-барабану. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 17:44 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
Господа вы все говорите очень дельные вещи. Особенно мне понравилось предложение переезда на extadata с учетом того, что у человека нет прав создавать индексы в продакшен схеме. И почему вы обращаете внимание только на count(1) предполагается, что других вычислений производиться не будет. А по поводу авторучета товаров где учетчик будет сидеть в кабинете а не на складе и для учета товар будет со склада пересылаться в кабинет учетчика например в Японии почтовая служба работает так быстро, что многие организации для передачи корреспонденции в соседнее здание пользуются услугами государственной почты и это получается быстрее и удобнее. Но это все разговоры в пользу бедных. Мы не с потолка вытянули этот метод технология описано на самом сайте Oracle хоть и под 10g для ряда вычислений это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 18:33 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
pamibol, Ты предлагаешь ускорить FULL SCAN вместо него используя FULL SCAN (select) + запихивание всей информации в PGA (bulk collect) + for loop. select + bulk collect + for loop таки может иметь смысл использовать если выборку надо оборвать по хитрому условию. Но опять же в коллекции здесь может не быть необходимости - можно фетчить курсор до наступления события. ТС надо прочитать кусок таблицы с простым фильтром без каких-либо условий "обрывания" выборки. Твой совет в данном случае полная чепуха. Рекомендую понять предназначение инструментов до того как давать советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 18:44 |
|
||
|
Выборка данных по не индексированной колонке
|
|||
|---|---|---|---|
|
#18+
pamibolМы не с потолка вытянули этот метод технология описано на самом сайте Oracle хоть и под 10g для ряда вычислений это работает. Да, слышал звон... Tы пойми это все для ускорения чтения данных (причем в PL/SQL что изначально делает производительность хуже SQL в 95% случаев), а для подсчета строк данные не нужны в принципе а для подсчета строк по условию данные по конкретным полям нужны на сервере а не на клиенте. Так-что незачем тут сравнивать скорость пeредачи данных когда сама пeредачa данных не нужна в принципе: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2016, 20:55 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39353807&tid=1886954]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 439ms |

| 0 / 0 |
