Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Считать ли багом (ORDER BY UNION)
|
|||
|---|---|---|---|
|
#18+
нашол на днях некое ограничение SQL в постгре, которое можно посчитать и багом, а можно и не считать: рассматривая как исполняецца запрос вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 12:27 |
|
||
|
Считать ли багом (ORDER BY UNION)
|
|||
|---|---|---|---|
|
#18+
Дело в том, что LIMIT накладывается на результирующее множество уже после того, как проведены все остальные манипуляции, в том числе и сортировка. Ведь ты же по сути просишь сервер вернуть ПЕРВУЯ запись из УПОРЯДОЧЕННОГО определенным образом набора данных. Сервер на момент начала сортировки не знает, какая запись окажеться первой с учетом заданного порядка сортировки. Поэтому он вначале выполняет полную сортировку всего выходного набора данных и только после этого применяет LIMIT 1. Так что, IMHO, всё вполне логично и честно со стороны сервера... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2006, 05:55 |
|
||
|
Считать ли багом (ORDER BY UNION)
|
|||
|---|---|---|---|
|
#18+
Владимор КоневДело в том, что LIMIT накладывается на результирующее множество уже после того, как проведены все остальные манипуляции, в том числе и сортировка. ... Так что, IMHO, всё вполне логично и честно со стороны сервера...гм. А кто вам сказал, шо я этого не "понимаю". Но что мешает серверу нормально парсить Код: plaintext 1. 2. т.ч., пораскинув, будем считать это особенностью синтаксиса с LIMIT супротив TOP. Гораздо неприятнее то, что оптимизатор возьмется сортировать _всю отобранную начальным (безъюнионным) запросом область_, даже если она сплошна по составному индексу, и требуется вернуть лишь одну запись с границы отобранной области. на мой взгляд выяснить сплошна ли область (или даже вычислить набор сплошных областей по сложному, но константному условию) довольно несложно. А приведенный юнион просто позволяет свести все к индексному отбору граничных записей для сложного условия (и окончательного лимита) даже не прибегая к выяснению характера итоговой области "фильтрации" - подобную (по идее,но не буквально) технику тоже можно бы было реализовать унутре оптимизайции лимита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2006, 10:43 |
|
||
|
Считать ли багом (ORDER BY UNION)
|
|||
|---|---|---|---|
|
#18+
4321 Владимор КоневДело в том, что LIMIT накладывается на результирующее множество уже после того, как проведены все остальные манипуляции, в том числе и сортировка. ... Так что, IMHO, всё вполне логично и честно со стороны сервера...гм. А кто вам сказал, шо я этого не "понимаю". Но что мешает серверу нормально парсить Код: plaintext 1. 2. т.ч., пораскинув, будем считать это особенностью синтаксиса с LIMIT супротив TOP. Гораздо неприятнее то, что оптимизатор возьмется сортировать _всю отобранную начальным (безъюнионным) запросом область_, даже если она сплошна по составному индексу, и требуется вернуть лишь одну запись с границы отобранной области. на мой взгляд выяснить сплошна ли область (или даже вычислить набор сплошных областей по сложному, но константному условию) довольно несложно. А приведенный юнион просто позволяет свести все к индексному отбору граничных записей для сложного условия (и окончательного лимита) даже не прибегая к выяснению характера итоговой области "фильтрации" - подобную (по идее,но не буквально) технику тоже можно бы было реализовать унутре оптимизайции лимита. Ход твоей мысли понял! Но, думаю, тут даже не разработчикам PostgeSQL вопрос. Тут нужно разработчикам стандарта ANSI-SQL сей вопрос задавать :) Ведь в стандарте явно сказано - что если результирующий набор данных получается путем объединения нескольких множест итоговых данных (то есть с использованием операций над множетсвами UNION / UNION ALL), то предложение ORDER BY должно быть одно на весь итоговый датасет. Думаю, что причина нежелания работать у первого запроса кроится именно в этом следовании требованиям ANSI-SQL. :) Хотя, конечно же, не понятно, почему в одном случае разработчики PostgreSQL следуют требованиям ANSI-SQL, а в другом - нет. Всё, конечно же, сугубо личное IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2006, 11:06 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=319&tid=2006352]: |
0ms |
get settings: |
11ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 271ms |
| total: | 427ms |

| 0 / 0 |
