
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
05.10.2016, 13:13
|
|||
|---|---|---|---|
|
|||
Почему с виду одинаковые запросы по разному упорядочивают данные? |
|||
|
#18+
Здравствуйте! Есть два, на мой взгляд, идентичных запроса: Код: sql 1. 2. 3. 4. 5. и Код: sql 1. 2. 3. 4. 5. Но они возвращают строки в разном порядке Вот структура используемой таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Почему данные возвращаются в разном порядке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2016, 13:29
|
|||
|---|---|---|---|
Почему с виду одинаковые запросы по разному упорядочивают данные? |
|||
|
#18+
авторORDER BY ordering; В обоих запросах. Значит, если попадётся два одинаковых ordering - субд может возвращать записи в любом удобном для себя порядке. И с течением времени работу СУБД этот порядок может самопроизвольно различаться, потому что вы не указали требуемый порядок. Если все ordering разные в выборке, но результат сортировки всё равно различается - то надо разбираться. Для этого покажите и тестовые данные тоже, на которых проблема воспроизводится. А так же версию субд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2016, 13:32
|
|||
|---|---|---|---|
|
|||
Почему с виду одинаковые запросы по разному упорядочивают данные? |
|||
|
#18+
если убрать ordering = 0 в условии одного из запросов, то выборки упорядочиваются одинаково. Но почему? Для данного virtuemart_product_id = 4560 все значения ordering равны 0 в таблице. Почему доп. условие так влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2016, 13:56
|
|||
|---|---|---|---|
Почему с виду одинаковые запросы по разному упорядочивают данные? |
|||
|
#18+
авторДля данного virtuemart_product_id = 4560 все значения ordering равны 0 в таблице Значит СУБД в своём праве. Может по своему усмотрению возвращать разный порядок хоть на каждый запрос. То что при некоторых условиях видите константный порядок - не более чем случайность. Что изменилось? План запроса скорей всего получился другой. Например, увидев where ordering = 0 и сортировку по этому же полю, оптимизатор вообще мог сортировку выкинуть из плана как объективно бесполезную операцию. Не знаю, умеет ли это глуповатый оптимизатор mysql, но версия как версия. Не вижу смысла разбираться с порядком не отсортированных строк конкретной версии mysql, да ещё и myisam. Поведение нормальное, может изменяться по усмотрению как субд, так и её разработчиков, в любое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2016, 15:36
|
|||
|---|---|---|---|
Почему с виду одинаковые запросы по разному упорядочивают данные? |
|||
|
#18+
Борис Гаркунони возвращают строки в разном порядкеВсё, что не указано явно, может выполняться как угодно. Порядок по ordering не нарушен? не нарушен. А как отсортируются записи в рамках равного ordering - как раз и описывается термином "как угодно". Причина же разного порядка в рамках равного ordering скорее всего в том, что в этих запросах используются (если, конечно) разные индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2016, 21:46
|
|||
|---|---|---|---|
|
|||
Почему с виду одинаковые запросы по разному упорядочивают данные? |
|||
|
#18+
MelkijавторДля данного virtuemart_product_id = 4560 все значения ordering равны 0 в таблице Значит СУБД в своём праве. Может по своему усмотрению возвращать разный порядок хоть на каждый запрос. То что при некоторых условиях видите константный порядок - не более чем случайность. Что изменилось? План запроса скорей всего получился другой. Например, увидев where ordering = 0 и сортировку по этому же полю, оптимизатор вообще мог сортировку выкинуть из плана как объективно бесполезную операцию. Не знаю, умеет ли это глуповатый оптимизатор mysql, но версия как версия. Не вижу смысла разбираться с порядком не отсортированных строк конкретной версии mysql, да ещё и myisam. Поведение нормальное, может изменяться по усмотрению как субд, так и её разработчиков, в любое время. ... я не понимаю что тебе не понятно??? а понял... короче, в первом случае вопрос - какой индекс будет использован? ясен пень что по айди, а потом результат надо отсортировать - сортировка либо в холостую пройдёт, либо может сделает ессчё пару перестановок...изза какойто мега оптимизации которая на холостом ходе даёт перестановок пару..не суть - записи будут считываться и ити в том порядке, в котором они перечислены в индексе по айди во втором случае, если надо и искать по ордеринг и сортировать - вопрос, какой индекс будет взять...ясень пень что ордеринг - и записи пойдут в том порядке в котором они перечисленны в этом индексе. ЗЫ но вообще верно ответили люди, ты не о том думаешь - если сортировка по оредеринг, а ардеринг везде равен нулю, это значит база должна дать просто результат - пусть он даже при повторных запросах будет давать новый порядок... ЗЫЗЫ ты когда говоришь разбейте както 100 рублей, задаешься потом вопросом почему в одном случае по 50 разбили, в другом по 10, втретем 50 + 5*10 .... нет! так почему сдесь задаёшься бессмысленными вопросами - что просили то и получите, надо есчё порядок по айди, так укажи его в секции ордер бай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&tablet=1&tid=1831352]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
19ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 350ms |

| 0 / 0 |
