Вопрос

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

Вот SQL:

select * 
from t_p_blog_article_info t  
order by t.pub_time desc
.

Это стоят 19s.

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с.

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

Это было полезно?

Решение

У вас, вероятно, есть индекс на Pub_time на вашем столе.

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

Другие советы

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

Три вещи, которые прилипают в голове:

1 - у вас есть индекс или композитный индекс, включающий PUB_TIME, а ограничение в вашем пункте, которое вызывает использование другого пути доступа

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top