![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Диас |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
Здравствуйте! Остро стоит проблема скорости передачи данных. Сервер (Oracle 8) далеко, связь не летает, таблицы очень большие. Такой вопрос:
по идее любой запрос выполняется на сервере? просто когда я пишу
то записи почти сразу начинают появляться. А если хочу узнать количество этих записей
то приходится очень долго ждать, как буд-то он сначала все записи грузит ко мне, а уже потом выдает их количество. Это правильно??? |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Во втором случае на клиента загружается только одна строка, это совершенно точно. Первый случай работает быстрей, потому что Oracle сразу начинает отдавать клиенту данные, не выполнив весь запрос до конца.
Попробуй переписать второй запрос так:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
Тоже очень долго! Неужели сервер дак долго производит эту операцию???
|
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
операцию - имеется введу подсчет количества записей, удовлетворяющих условия. Таблицы действительно большие. По несколько сот тысяч записей. и еще вопрос.
Если написать так:
то мне реально вышлютсь только 99 записей? |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
ну во первых не 99 а 101, т.к. between берет диапозон включительно. а вовторых нет шансов получить даже одну строку, т.к. присваивание значений псевдостолбцу (rownum) происходит после выполнения from и where.
долго или не долго и на какой именно операции тормозит можно будет сказать не раньще чем ты покажещь план запроса. Это сообщение отредактировал(а) DimW - 18.6.2008, 10:34 |
|||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
DimW, не совсем точно понимаю что значит план запроса, но сам запрос имеется в первом моем сообщении (который с 2ой, с Count). По времени выполняется минут 7. Но тут видишь, сервер далековато стоит и линк медленный. А запрос тот что без Count начинает выдавать записи уже через полминуты.
Действительно! Работает только если начало диапазона =1. Если больше, не выдает ничего. А как тогда грузить таблицу по частям??? Мне это надо было для прогресс бара. Может есть более изящный способ отображать ход загрузки таблицы??? |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
SELECT STATEMENT, GOAL = ALL_ROWS Cost=3 Cardinality=1 Bytes=12
SORT AGGREGATE Cardinality=1 Bytes=12 FILTER INDEX FAST FULL SCAN Object owner=MKT Object name=TM_SAL_MST_IX18 Cost=3 Cardinality=12906 Bytes=154872 TABLE ACCESS FULL Object owner=MKT Object name=M3_KB_INV Cost=129 Cardinality=1094 Bytes=13128 Добавлено через 51 секунду Вот план для запроса с count ![]() |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
точно! Извиняюсь. Вот запрос:
про индексы пока к сожалению не знаю как посмотреть :( |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
Результат:
INDEX_NAME INDEX_TYPE COLUMN_NAME 1 EXM_SAL_MST_02 NORMAL PO_ID 2 EXM_SAL_MST_02 NORMAL DIV_CODE 3 EXM_SAL_MST_02 NORMAL COM_CODE 4 PK_SAL_MST NORMAL ORDER_NO 5 PK_SAL_MST NORMAL COM_CODE 6 PK_SAL_MST NORMAL DIV_CODE 7 TM_SAL_MST_IX1 NORMAL STATUS 8 TM_SAL_MST_IX1 NORMAL COM_CODE 9 TM_SAL_MST_IX1 NORMAL DIV_CODE 10 TM_SAL_MST_IX1 NORMAL INVO_DATE 11 TM_SAL_MST_IX1 NORMAL WH_CODE 12 TM_SAL_MST_IX10 NORMAL INVO_DATE 13 TM_SAL_MST_IX10 NORMAL DIV_CODE 14 TM_SAL_MST_IX10 NORMAL COM_CODE 15 TM_SAL_MST_IX11 NORMAL PICK_NO 16 TM_SAL_MST_IX11 NORMAL DIV_CODE 17 TM_SAL_MST_IX11 NORMAL COM_CODE 18 TM_SAL_MST_IX13 NORMAL CREDIT_TO 19 TM_SAL_MST_IX13 NORMAL STATUS 20 TM_SAL_MST_IX14 NORMAL DELY_NO 21 TM_SAL_MST_IX14 NORMAL DIV_CODE 22 TM_SAL_MST_IX14 NORMAL COM_CODE 23 TM_SAL_MST_IX15 NORMAL STATUS 24 TM_SAL_MST_IX15 NORMAL INVO_DATE 25 TM_SAL_MST_IX16 NORMAL STATUS 26 TM_SAL_MST_IX16 NORMAL REQ_DATE 27 TM_SAL_MST_IX17 NORMAL STATUS 28 TM_SAL_MST_IX17 NORMAL DELY_DATE 29 TM_SAL_MST_IX18 NORMAL BILL_TO 30 TM_SAL_MST_IX18 NORMAL INVO_DATE 31 TM_SAL_MST_IX18 NORMAL INVO_NO 32 TM_SAL_MST_IX19 NORMAL PICK_DATE 33 TM_SAL_MST_IX2 NORMAL INVO_NO 34 TM_SAL_MST_IX2 NORMAL DIV_CODE 35 TM_SAL_MST_IX2 NORMAL COM_CODE 36 TM_SAL_MST_IX20 NORMAL REF_REG_CODE 37 TM_SAL_MST_IX21 NORMAL STATUS 38 TM_SAL_MST_IX21 NORMAL REQ_DELY_DATE 39 TM_SAL_MST_IX22 NORMAL IO_NO 40 TM_SAL_MST_IX23 NORMAL PARENT_ORDER_NO 41 TM_SAL_MST_IX24 NORMAL GROUP_TO 42 TM_SAL_MST_IX24 NORMAL INVO_DATE 43 TM_SAL_MST_IX24 NORMAL ORDER_DATE 44 TM_SAL_MST_IX25 NORMAL EDI_NO 45 TM_SAL_MST_IX3 NORMAL CUST_ORDER_NO 46 TM_SAL_MST_IX3 NORMAL PO_DATE 47 TM_SAL_MST_IX3 NORMAL ORDER_DATE 48 TM_SAL_MST_IX4 NORMAL DELY_DATE 49 TM_SAL_MST_IX4 NORMAL WH_CODE 50 TM_SAL_MST_IX5 NORMAL INVO_DATE 51 TM_SAL_MST_IX5 NORMAL INVO_NO 52 TM_SAL_MST_IX5 NORMAL ORDER_DATE 53 TM_SAL_MST_IX5 NORMAL CUST_CD 54 TM_SAL_MST_IX5 NORMAL ORDER_NO 55 TM_SAL_MST_IX5 NORMAL PICK_NO 56 TM_SAL_MST_IX6 NORMAL ORDER_DATE 57 TM_SAL_MST_IX6 NORMAL COM_CODE 58 TM_SAL_MST_IX6 NORMAL DIV_CODE 59 TM_SAL_MST_IX6 NORMAL STATUS 60 TM_SAL_MST_IX6 NORMAL WH_CODE 61 TM_SAL_MST_IX6 NORMAL CREATE_EMP 62 TM_SAL_MST_IX6 NORMAL STATE 63 TM_SAL_MST_IX6 NORMAL SHIP_TO_NAME 64 TM_SAL_MST_IX6 NORMAL BILL_TO_NAME 65 TM_SAL_MST_IX7 NORMAL REQ_DATE 66 TM_SAL_MST_IX7 NORMAL COM_CODE 67 TM_SAL_MST_IX7 NORMAL DIV_CODE 68 TM_SAL_MST_IX7 NORMAL STATUS 69 TM_SAL_MST_IX7 NORMAL WH_CODE 70 TM_SAL_MST_IX8 NORMAL ARRIVAL_DATE 71 TM_SAL_MST_IX8 NORMAL COM_CODE 72 TM_SAL_MST_IX8 NORMAL DIV_CODE 73 TM_SAL_MST_IX8 NORMAL STATUS 74 TM_SAL_MST_IX8 NORMAL WH_CODE 75 TM_SAL_MST_IX9 NORMAL EXPIRE_DATE 76 TM_SAL_MST_IX9 NORMAL COM_CODE 77 TM_SAL_MST_IX9 NORMAL DIV_CODE 78 TM_SAL_MST_IX9 NORMAL STATUS 79 TM_SAL_MST_IX9 NORMAL WH_CODE 80 TM_SAL_MST_UX01 NORMAL ORDER_NO 81 TM_SAL_MST_UX01 NORMAL COM_CODE 82 TM_SAL_MST_UX01 NORMAL DIV_CODE 83 TM_SAL_MST_UX01 NORMAL STATUS 84 TM_SAL_MST_UX01 NORMAL WH_LOCATION 85 TM_SAL_MST_UX01 NORMAL INVO_DATE ![]() |
|||
|
||||
Диас |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 11.6.2006 Репутация: нет Всего: нет |
Вот еще пример:
его план: SELECT STATEMENT, GOAL = RULE Cost=7 Cardinality=1 Bytes=200 FILTER NESTED LOOPS Cost=7 Cardinality=1 Bytes=200 NESTED LOOPS Cost=6 Cardinality=1 Bytes=177 TABLE ACCESS BY INDEX ROWID Object owner=MKT Object name=TM_SAL_MST Cost=3 Cardinality=1 Bytes=49 INDEX RANGE SCAN Object owner=MKT Object name=TM_SAL_MST_IX15 Cost=2 Cardinality=1 TABLE ACCESS BY INDEX ROWID Object owner=MKT Object name=TM_SAL_DTL Cost=3 Cardinality=1 Bytes=128 INDEX RANGE SCAN Object owner=MKT Object name=TM_SAL_DTL_PK Cost=2 Cardinality=1 TABLE ACCESS BY INDEX ROWID Object owner=MKT Object name=TM_MODEL Cost=1 Cardinality=20 Bytes=460 INDEX UNIQUE SCAN Object owner=MKT Object name=PK_MODEL Cardinality=20 TABLE ACCESS FULL Object owner=MKT Object name=M3_KB_INV Cost=129 Cardinality=1 Bytes=21 индексы вывести по всем участвующим таблицам? Запрос выводит 0 строк за примерно 150 секунд. А если сократить в запросе диапазон дат до одного дня, то те же 0 строк выдает за 2 секунды. Неужели сервер (довольно мощный) выполняет запрос около 2х минут??? или что-то обрабатывается у меня - на клиентской стороне? |
|||
|
||||
DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
Диас, что ты прыгаешь от темы к теме так мы ничего не выясним...
уясни раз и навсегда какой бы ты хитрый запрос ты не запускал, на клиенте ничего не выполняется и выполняться не может. а авторы не индусы случайно, уж очень похоже на их подчерк... возвращаясь к запросу:
могу предложить пересмотреть решение на такое:
мог перепутать названия полей при связке - t2.invo_no(+) = t.invoiceno. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |