Два sql для отсортированной даты и времени - PullRequest
7 голосов
/ 13 марта 2012

У меня есть данные строки 98 Вт.Когда я хочу отсортировать свои данные с pub_time, я нашел интересную вещь.

Вот SQL:

select * 
from t_p_blog_article_info t  
order by t.pub_time desc

Это стоит 19 с.

select * 
from t_p_blog_article_info t 
where t.pub_time > to_date( '1900-01-01 01:00:00', 'yyyy-mm-dd   hh24:mi:ss ')  
order by t.pub_time desc

Это стоит0,2 с.

Я хочу знать, почему?

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Возможно, у вас есть индекс pub_time в вашей таблице.

Следовательно, второй запрос может использовать этот индекс для возврата только тех записей с ненулевыми датами после указанной даты, тогда как первый запрос должен запросить всю таблицу.

0 голосов
/ 13 марта 2012

Есть ряд возможностей.Вы можете отфильтровывать большое количество строк с недействительными / нулевыми датами в pub_time, но я сомневаюсь, что вы не заметите / не упомянете значительное их количество.

Три вещи, которые мне запомнилисьявляются:

1 - у вас есть индекс или составной индекс, включающий pub_time, и ограничение в предложении where инициирует использование другого пути доступа

2 - у вас не было статистики для оптимизатора, когда вы выполняли свой первый запрос.При выполнении второго запроса был выбран лучший путь доступа благодаря некоторому кешированию информации, которое происходило при запуске первого запроса.Это можно проверить, выполнив первый запрос еще несколько раз и увидев существенное улучшение производительности.

3 - Как и в первом пункте, оптимизатор может просто выбрать лучшийпуть доступа основывается исключительно на последствиях предложения where.Возможно, намекнуть, что нулевые / недействительные значения не нужно обрабатывать, достаточно - ваша система может избежать одного или нескольких полных сканирований таблиц, чтобы отсеять недопустимые / нулевые pub_times.

Определение причин подобных вещейбыстро становится эмпирическим предприятием - мне сложно сказать больше, не зная вашей платформы и версии.Из тэга, который я понимаю, вы используете оракул, и в этом случае вы должны иметь возможность использовать некоторую форму инструмента «объяснить запрос» или «объяснить план», чтобы лучше понять, что происходит.Для получения дополнительной информации об оптимизаторе оракула см. http://docs.oracle.com/cd/B10500_01/server.920/a96533/optimops.htm (Это для Oracle 9i v9.2, но в нем есть достойное объяснение концепций, не зависящих от версии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...