Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Сравнивая 2009 и 2010 версии в нескольких местах обнаружил неприятность: Если стоит безобидный вроде бы ORDER BY ID, иногда в 2010 запрос выполняется ощутимо дольше, чем при отсутствии сортировки вовсе. Вопрос: Могу ли я безболезненно убрать ORDER BY ID? Вроде бы да... Но, то-ж Каше ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 15:14 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
"ощутимо" в данном случае - в сотни тысяч раз медленнее работает запрос ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 15:21 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Не уверен, что всегда, зависит от плана запроса. Кстати замечал, что при сортировки по индексированному полю каше упорно хочет по нему пойти (а ид по умолчанию индексирован) Попробуйте сделать d $system.SQL.TuneTable("*",1,1) Вместо звездочки назвение вашей таблицы, может перестройка селективности уберет проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 16:29 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesov, по моему опыту order by id всегда получался автоматически. Но индексов и условий экзотических не было. Хотя не очень понимаю, почему order by id замедляет запрос в сотни тысяч раз. Какого размера получается выборка для сортировки? Можно пример такого запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 16:48 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesov, и подразумеваем, что структура хранения стандартная, а не экзотический sqlstorage с вычисляемыми Id... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 16:58 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Почему так происходит - в принципе понятно есть индексы по каким-то полям, идет выборка по этим полям - все как обычно И тут появляется сортировка по одному из полей, и это поле тоже индексировано. Так вот, каше в некоторых случаях считает, что накладные расходы на сортировку по этому полю будут меньше, если сразу по этому индексу делать выборку. Почему я предложил перестроить сделать TuneTable - возможно EXTENTSIZE у таблице не соответвует реальному и каше считает, что в таблице пара десятков записей и не стоит заморачиваться какими-то индексами, тем более что селективность по другим полям наверняка тоже выставлена неверно. Еще как вариант, если не поможет TuneTable, сделать order by tochar(ID), думаю, каше не сможет использовать индекс для выражения и пойдет по другим индексам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 18:10 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesovИдентично ли "ORDER BY ID" отсутствию сортировки? Нет и никогда не было. kolesovВопрос: Могу ли я безболезненно убрать ORDER BY ID? Вроде бы да... Но, то-ж Каше ;) Можете - если вам в том куске кода с запросом безразличен порядок записей - иначе смотри выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 20:21 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesov"ощутимо" в данном случае - в сотни тысяч раз медленнее работает запрос ;) Ну тут план запросов (с сортировкой и без) смотреть нужно и структуру данных. Ище у Вас случайно ID не переопределен ? Если вместо ORDER BY ID использовать ORDER BY %ID что нибудь измениться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 20:25 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesov, Ptn Если вместо ORDER BY ID использовать ORDER BY %ID что нибудь измениться ? А если вместо ORDER BY ID другое поле - то есть проблема замедления связана с ID или с сортировкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 02:19 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Не уверен, что всегда, зависит от плана запроса. Кстати замечал, что при сортировки по индексированному полю каше упорно хочет по нему пойти (а ид по умолчанию индексирован) Попробуйте сделать d $system.SQL.TuneTable("*",1,1) Вместо звездочки назвение вашей таблицы, может перестройка селективности уберет проблему? EXTENTSIZE = 100000 по-умолчанию, как я понял Настроена таблица ручками - как раз для проходов по нужным индексам. TuneTable нежелателен, все нужное определено в SELECTIVITY. На простом примере (разница не так наглядна, но все же есть): (увеличил EXTENTSIZE до 1 млн). SELECT TOP 1000 ... ORDER BY ID Быстродействие: 0.250 Секунд 186722 глобальных ссылок SELECT TOP 1000 ... ORDER BY %ID Быстродействие: 0.248 Секунд 186722 глобальных ссылок SELECT TOP 1000 ... Быстродействие: 0.038 Секунд 8984 глобальных ссылок Получающийся в выборке порядок идентичен - сортировка по ID... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 05:43 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
ser_shukolesov, по моему опыту order by id всегда получался автоматически. Но индексов и условий экзотических не было. Хотя не очень понимаю, почему order by id замедляет запрос в сотни тысяч раз. Какого размера получается выборка для сортировки? Можно пример такого запроса? Аналогично - самая обычная стандартная таблица. Результат-то один и тот же... Но медленнее... С примером плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 05:44 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Еще как вариант, если не поможет TuneTable, сделать order by tochar(ID), думаю, каше не сможет использовать индекс для выражения и пойдет по другим индексам. Попробовал - в полтора раза медленнее, чем ORDER BY ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 05:46 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Все-таки я порекомендовал бы сделать TuneTable Она селективности записывает в структуру хранения, так что ваши в определении не сотрутся, а будут просто игнорироваться. При желании из структуры хранения можно их вытереть. И можно планы в студию? А то гадание на кофейной гуще. И селективности посмотреть бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 06:01 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesov, Проблема в TOP 1000. Без сортировки запрос обрывается на первых полученных 1000 записей в процессе выборки. При JRDER BY ... необходимо получить сначала отсортированную последовательность всех записей, а потом оставить первые 1000 записей. По моему, на больших массивах никак не обойдешься без замедления в случае с TOP 1000. Если только выборка сама меньше 1000, то сортировка незаметно пройдет, а на 1 000 000 уже будет заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 06:04 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
PtnkolesovИдентично ли "ORDER BY ID" отсутствию сортировки? Нет и никогда не было. kolesovВопрос: Могу ли я безболезненно убрать ORDER BY ID? Вроде бы да... Но, то-ж Каше ;) Можете - если вам в том куске кода с запросом безразличен порядок записей - иначе смотри выше Вы уверены? Я проверил тысячу записей - для ORDER BY ID и без него порядок записей в выборке один и тот же... В документации "If a SELECT query does not specify an ORDER BY clause, the returned record order is not predictable." Фича!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 06:11 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesovPtnkolesovИдентично ли "ORDER BY ID" отсутствию сортировки? Нет и никогда не было. kolesovВопрос: Могу ли я безболезненно убрать ORDER BY ID? Вроде бы да... Но, то-ж Каше ;) Можете - если вам в том куске кода с запросом безразличен порядок записей - иначе смотри выше Вы уверены? Я проверил тысячу записей - для ORDER BY ID и без него порядок записей в выборке один и тот же... В документации "If a SELECT query does not specify an ORDER BY clause, the returned record order is not predictable." Фича!? Ptn прав, в общем случае (как и в документации сказано) сортировка записей непредсказуема. Я ранее написал, что по моему опыту почти всегда получалась сортировка по ID, если не указана другая сортировка. Но алгоритмы меняются от версии к версии в Каше. И я представляю, что оптимизации выборки с учетом попадающих в запрос индексов будет выбирать записи не обращая внимания на ID. Схема запроса определит сортировку в выборке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 06:35 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Все-таки я порекомендовал бы сделать TuneTable Она селективности записывает в структуру хранения, так что ваши в определении не сотрутся, а будут просто игнорироваться. При желании из структуры хранения можно их вытереть. И можно планы в студию? А то гадание на кофейной гуще. И селективности посмотреть бы. В SAMPLES: Текст запроса SELECT ID FROM Cinema.Film --ORDER BY ID План запроса Отосительная стоимость = 787000 Read index map Cinema.Film.TicketsSoldIndex, looping on TicketsSold and ID. For each row: Output the row. Текст запроса SELECT ID FROM Cinema.Film ORDER BY ID План запроса Отосительная стоимость = 2440400 Read master map Cinema.Film.IDKEY, looping on ID. For each row: Output the row. Совсем странно, однако ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 07:59 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
В общем, примерно понятно. 1. Без ORDER BY ID Каше ищет самый "короткий" индекс. 2. В случае использования ORDER BY ID с попыткой Каше "оптимизировать" запрос нужно бороться селективностью. Ну... или как-то так ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 08:04 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
kolesovВы уверены? Я проверил тысячу записей - для ORDER BY ID и без него порядок записей в выборке один и тот же... Уверен - Считать что без указания сортировки база возвращает записи в порядке возрастания ID записей - очень опасное но тем не менее распространенное заблуждение. Студент А постоянно встречается со Студентом Б на автобусной остановке, даже если специально не договаривались между собой об этом. Вы уверены что эта "фича" сохраниться когда они закончат институт ? kolesov В документации "If a SELECT query does not specify an ORDER BY clause, the returned record order is not predictable." Фича!? Это не фича. Это свойства языка SQL. kolesovSELECT TOP 1000 ... ORDER BY ID Быстродействие: 0.250 Секунд 186722 глобальных ссылок SELECT TOP 1000 ... ORDER BY %ID Быстродействие: 0.248 Секунд 186722 глобальных ссылок SELECT TOP 1000 ... Быстродействие: 0.038 Секунд 8984 глобальных ссылок Тут то как раз всё понятно - "виноват" TOP ибо третий запрос выполняется как только наберется 1000 записей, а первые два сначала делают полную выборку всех данных, сортируют её и только потом берут первую 1000-чу. При построении плана зря убрали TOP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 08:10 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
Я не очень уверен - но попробуйте на своих данных вот такой вид запроса Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 08:19 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
[quot Ptn]Вы уверены что эта "фича" сохраниться когда они закончат институт ?[quot kolesov] Вот-вот... Когда же разработчики ИС закончат институт наконец!? И поведение Каше станет стабильным... ;) Шучу. Оно везде так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 08:21 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
PtnЯ не очень уверен - но попробуйте на своих данных вот такой вид запроса Код: plaintext 1. Спасибо. Этот, и другие способы (IN, %INLIST, EXISTS, %noflatten), мы и используем для увеличения производительности запросов. Помимо селективности. Главное принцип стал понятен. ORDER BY ID все же нужен... А как запрос вернуть к нормальным индексам - придумаю. Спасибо еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 08:25 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
В подтверждение Код: plaintext Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 08:59 |
|
||
|
Идентично ли "ORDER BY ID" отсутствию сортировки?
|
|||
|---|---|---|---|
|
#18+
servit, Очень показательно ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2010, 09:02 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36612012&tid=1558063]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 460ms |

| 0 / 0 |
