Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
Можно ли оптимизировать запрос?

План такой

select /*+index(n) index(nt INDX_NCARDS_NUMBERS) */
 *
  from life t, ncards nt
 where    t.tip = 3395
   and t.displayvalue = trim(To_char(nt.numberagcd, '00')) || '-' ||
       trim(To_char(nt.number__, '000000')) || '(' ||
       trim(To_char(nt.subnumber, '000')) || ')'


план такой

SELECT STATEMENT, GOAL = CHOOSE			Cost=19769	Cardinality=34835136	Bytes=14108230080
 HASH JOIN			Cost=19769	Cardinality=34835136	Bytes=14108230080
  TABLE ACCESS FULL	Object owner=INT1230	Object name=LIFE	Cost=17106	Cardinality=425782	Bytes=37894598
  TABLE ACCESS BY INDEX ROWID	Object owner=DPM_RONE	Object name=NCARDS	Cost=826	Cardinality=422467	Bytes=133499572
   INDEX FULL SCAN	Object owner=DPM_RONE	Object name=INDX_NCARDS_NUMBERS	Cost=26	Cardinality=422467	
5 фев 07, 12:27    [3738816]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
А какова цель оптимизации:
- First rows?
- All rows?
5 фев 07, 12:31    [3738849]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
долго очень работает, можно ли как-нибудь ускорить?
5 фев 07, 12:32    [3738861]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
evostr
Member

Откуда: Екатеринбург
Сообщений: 1278
Статистика актуальная?
Cardinality правильная?
Сколько всего строк в ncards? хинт обязателен?
Селективность поля tip какая?
5 фев 07, 12:35    [3738892]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
miksoft
Member

Откуда:
Сообщений: 38540
сколько даст
select count(*) from life where tip = 3395
?
5 фев 07, 12:39    [3738921]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
1) актуальная
2) правильная
3)422 тыс строк ncards, не обязателен а как сред-во ускорения
4)59 млн в табл life
5 фев 07, 12:47    [3738984]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
при таком условии 522474 записи
5 фев 07, 12:51    [3738996]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
evostr
Member

Откуда: Екатеринбург
Сообщений: 1278
ips
1) актуальная
2) правильная
3)422 тыс строк ncards, не обязателен а как сред-во ускорения
4)59 млн в табл life

3) И что, с хинтом быстрее?
4) индекс по полю tip есть?
5 фев 07, 12:57    [3739040]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
givanov
Member

Откуда:
Сообщений: 757
evostr
3) И что, с хинтом быстрее?
+1
И что за индекс INDX_NCARDS_NUMBERS?
5 фев 07, 13:00    [3739055]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
1)индекс B дерева
2)с хинтом быстрее
5 фев 07, 13:51    [3739406]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
по полю tip тоже есть индекс.
Есть мысли как тут ускорить?
5 фев 07, 14:02    [3739490]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
OraDen
Member

Откуда:
Сообщений: 828
givanov
evostr
3) И что, с хинтом быстрее?
+1
И что за индекс INDX_NCARDS_NUMBERS?


+1

Честно говоря не совсем понятно чем помогает INDX_NCARDS_NUMBERS (какие в нем поля
или он функциональный?) и самое главное, от функции в условии избавиться нельзя?
5 фев 07, 14:24    [3739611]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
NightGhost
Member

Откуда:
Сообщений: 629
Индекс по функции
5 фев 07, 14:24    [3739612]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
NightGhost
Member

Откуда:
Сообщений: 629
попробуйте затестить хинт /*+ ORDERED*/
5 фев 07, 14:27    [3739630]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
NightGhost
Member

Откуда:
Сообщений: 629
а можно получить полную информацию о структурах таблиц и индексах присутствующих
а также количество строк, селективность.
предполагается что статистика собрана
5 фев 07, 14:29    [3739648]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
OraDen
Member

Откуда:
Сообщений: 828
Если я правильно понял индекс по таблице LIFE по полю tip не работает:

TABLE ACCESS FULL	Object owner=INT1230	Object name=LIFE
5 фев 07, 14:34    [3739674]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
givanov
Member

Откуда:
Сообщений: 757
Вероятно, проблема быстродействия этого запроса - слишком большой объем выбираемых данных.
Если это не так и есть функциональный индекс - то запрос очень простой и оптимизатор без хинтов должен его правильно понять.
В совсем крайнем случае, если мало пересечение (tip = 3395) и (exists (select * from ncards where ...)) может помочь индекс по life (tip,displayvalue).
5 фев 07, 14:44    [3739743]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
По индексам для табл life, в приложении

К сообщению приложен файл (111.html - 6Kb) cкачать
5 фев 07, 15:07    [3739892]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
givanov
Member

Откуда:
Сообщений: 757
Ой!
Срочно в библиотеку, читать про индексы.
5 фев 07, 15:14    [3739950]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
что там читать? о чём вы?
5 фев 07, 15:19    [3739990]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
givanov
Member

Откуда:
Сообщений: 757
Ну, например, зачем Вам (ID, TIP) Unique, если уже есть (ID) Unique?
На такой большой таблице Вы держите кучу ненужных индексов. Это говорит о том, что назначения их Вы не понимаете.
5 фев 07, 15:26    [3740054]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
Да не я держу, просто попросили оптимизировать запрос. Вопрос не в этом сейчас.
5 фев 07, 15:32    [3740100]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
evostr
Member

Откуда: Екатеринбург
Сообщений: 1278
Извините, что повторяюсь, но запрос реально возвращает 35 млн. записей?
И еще, можно на план без хинта посмотреть, как то не верится, что с хинтом быстрее
5 фев 07, 15:36    [3740132]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
givanov
Member

Откуда:
Сообщений: 757
В дубле этой темы ответ смотрели?
Пробовали?

Индекс у Вас по (upper(t.displayvalue), tip) есть. Пробовали его использовать?
select *
  from life t, ncards nt
 where    t.tip = 3395
   and upper(t.displayvalue) = trim(To_char(nt.numberagcd, '00')) || '-' ||
       trim(To_char(nt.number__, '000000')) || '(' ||
       trim(To_char(nt.subnumber, '000')) || ')'
?
5 фев 07, 15:40    [3740169]     Ответить | Цитировать Сообщить модератору
 Re: оптимизировать запрос  [new]
ips
Member

Откуда:
Сообщений: 135
Без хинта не лучше:
SELECT STATEMENT, GOAL = CHOOSE Cost=19396 Cardinality=34835136 Bytes=14108230080
HASH JOIN Cost=19396 Cardinality=34835136 Bytes=14108230080
TABLE ACCESS FULL Object owner=INT1230 Object name=LIFE Cost=17106 Cardinality=425782 Bytes=37894598
TABLE ACCESS FULL Object owner=DPM_RONE Object name=NCARDS Cost=453 Cardinality=422467 Bytes=133499572

Хотя судя по плану хинт нам не помогает!
5 фев 07, 15:43    [3740192]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить