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

Откуда:
Сообщений: 5
Здравствуйте!

Просмотрел FAQ, просмотрел уже не одну книгу по Oracle, но решения или описания подобной проблемы не нашел:(

Выполняю следующий код:

select distinct
substr(pgv_date,1,6)  visits_date,
count(*)
         over (partition by substr(pgv_date,1,6) ) visits_count    
from page_visit 
where pgv_id < 615441
order by substr(pgv_date,1,6)
;

время выполнения - около 2,875с. Если изменить условие на where pgv_id < 615442, то время будет примерно в 4 раз больше - около 11-12с.

С чем может быть проблема? Помогите хотя бы ссылками на источники.

С уважением.
21 сен 11, 18:07    [11314493]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
-2-
Member

Откуда:
Сообщений: 15330
frenkybob
просмотрел уже не одну книгу по Oracle, но решения или описания подобной проблемы не нашел:(
начни с чтения про group by, потом будешь рассуждать про "не нашел"
21 сен 11, 18:11    [11314513]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
frenkybob
Member

Откуда:
Сообщений: 5
ну вот. group by сработал прекрасно. надо еще читать про то, где использовать аналитические функции.

Вот код

select
substr(pgv_date,1,6)  visits_date,
count(*)
from page_visit 
group by substr(pgv_date,1,6)

Сработал для 5кк записей за 8с.

-2- , спасибо большое!
21 сен 11, 18:22    [11314587]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
kastolom
Member

Откуда:
Сообщений: 325
frenkybob,

Когда хочется написать написать нечто типа:
select dictinct ... count(*) over(...) from ...
то тут сразу group by
21 сен 11, 18:41    [11314708]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
kastolom
Member

Откуда:
Сообщений: 325
да забыл добавить, такая запись:
substr(pgv_date,1,6)
моветон, на сколько я понял pgv_date, поэтому почитай о функциях преобразования даты
21 сен 11, 18:43    [11314726]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
frenkybob
Member

Откуда:
Сообщений: 5
kastolom, там дата, но она в varchar2 хранится. или даты лучше в date хранить все таки?
21 сен 11, 18:46    [11314752]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
kastolom
Member

Откуда:
Сообщений: 325
frenkybob,

я обычно даты храню в датах, потому что даты можно представлять вобще в любом виде для различных стран (в соответствии с их национальными стандартами), могу различно преобразовывать, о преобразованиях рекомендую прямо сейчас почитать в гугле, займет 5-10 минут, а профита получишь очень много, могу сортировать, в случае если держать в строковом виде это становится менее тривиальная задача, да вобще туча всяких возможностей появляется
21 сен 11, 18:53    [11314807]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
Elic
Member

Откуда:
Сообщений: 29988
frenkybob
или даты лучше в date хранить все таки?
Конечно же нет, тролль.
21 сен 11, 18:54    [11314820]     Ответить | Цитировать Сообщить модератору
 Re: Резко возрастает время выполнения запроса.  [new]
frenkybob
Member

Откуда:
Сообщений: 5
kastolom, Удобнее было базу генерить для Varchar2. Переделаю сейчас столбец. Спасибо за советы
Elic, :) я не троль, я нуб))
21 сен 11, 19:01    [11314882]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить