powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему с виду одинаковые запросы по разному упорядочивают данные?
6 сообщений из 6, страница 1 из 1
Почему с виду одинаковые запросы по разному упорядочивают данные?
    #39320975
Здравствуйте!

Есть два, на мой взгляд, идентичных запроса:
Код: sql
1.
2.
3.
4.
5.
SELECT pm.* 
FROM ytgb1_virtuemart_product_medias pm
WHERE ordering = 0
	AND virtuemart_product_id = 4560
ORDER BY ordering;


и
Код: sql
1.
2.
3.
4.
5.
SELECT 
`virtuemart_media_id` 
FROM `ytgb1_virtuemart_product_medias` 
WHERE `virtuemart_product_id` = "4560" 
ORDER BY `ordering`;


Но они возвращают строки в разном порядке
Вот структура используемой таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE `ytgb1_virtuemart_product_medias` (
 `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
 `virtuemart_product_id` int(1) unsigned NOT NULL DEFAULT '0',
 `virtuemart_media_id` int(1) unsigned NOT NULL DEFAULT '0',
 `ordering` int(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 UNIQUE KEY `virtuemart_product_id` (`virtuemart_product_id`,`virtuemart_media_id`),
 KEY `ordering` (`ordering`)
) ENGINE=MyISAM AUTO_INCREMENT=25240 DEFAULT CHARSET=utf8


Почему данные возвращаются в разном порядке?
...
Рейтинг: 0 / 0
Почему с виду одинаковые запросы по разному упорядочивают данные?
    #39321004
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторORDER BY ordering;
В обоих запросах. Значит, если попадётся два одинаковых ordering - субд может возвращать записи в любом удобном для себя порядке. И с течением времени работу СУБД этот порядок может самопроизвольно различаться, потому что вы не указали требуемый порядок.

Если все ordering разные в выборке, но результат сортировки всё равно различается - то надо разбираться. Для этого покажите и тестовые данные тоже, на которых проблема воспроизводится. А так же версию субд.
...
Рейтинг: 0 / 0
Почему с виду одинаковые запросы по разному упорядочивают данные?
    #39321007
если убрать ordering = 0 в условии одного из запросов, то выборки упорядочиваются одинаково. Но почему? Для данного virtuemart_product_id = 4560 все значения ordering равны 0 в таблице. Почему доп. условие так влияет?
...
Рейтинг: 0 / 0
Почему с виду одинаковые запросы по разному упорядочивают данные?
    #39321029
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДля данного virtuemart_product_id = 4560 все значения ordering равны 0 в таблице
Значит СУБД в своём праве. Может по своему усмотрению возвращать разный порядок хоть на каждый запрос. То что при некоторых условиях видите константный порядок - не более чем случайность.

Что изменилось? План запроса скорей всего получился другой.
Например, увидев where ordering = 0 и сортировку по этому же полю, оптимизатор вообще мог сортировку выкинуть из плана как объективно бесполезную операцию. Не знаю, умеет ли это глуповатый оптимизатор mysql, но версия как версия. Не вижу смысла разбираться с порядком не отсортированных строк конкретной версии mysql, да ещё и myisam. Поведение нормальное, может изменяться по усмотрению как субд, так и её разработчиков, в любое время.
...
Рейтинг: 0 / 0
Почему с виду одинаковые запросы по разному упорядочивают данные?
    #39321138
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркунони возвращают строки в разном порядкеВсё, что не указано явно, может выполняться как угодно.
Порядок по ordering не нарушен? не нарушен. А как отсортируются записи в рамках равного ordering - как раз и описывается термином "как угодно".
Причина же разного порядка в рамках равного ordering скорее всего в том, что в этих запросах используются (если, конечно) разные индексы.
...
Рейтинг: 0 / 0
Почему с виду одинаковые запросы по разному упорядочивают данные?
    #39321438
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijавторДля данного virtuemart_product_id = 4560 все значения ordering равны 0 в таблице
Значит СУБД в своём праве. Может по своему усмотрению возвращать разный порядок хоть на каждый запрос. То что при некоторых условиях видите константный порядок - не более чем случайность.

Что изменилось? План запроса скорей всего получился другой.
Например, увидев where ordering = 0 и сортировку по этому же полю, оптимизатор вообще мог сортировку выкинуть из плана как объективно бесполезную операцию. Не знаю, умеет ли это глуповатый оптимизатор mysql, но версия как версия. Не вижу смысла разбираться с порядком не отсортированных строк конкретной версии mysql, да ещё и myisam. Поведение нормальное, может изменяться по усмотрению как субд, так и её разработчиков, в любое время.

... я не понимаю что тебе не понятно???

а понял...

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

во втором случае, если надо и искать по ордеринг и сортировать - вопрос, какой индекс будет взять...ясень пень что ордеринг - и записи пойдут в том порядке в котором они перечисленны в этом индексе.

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

ЗЫЗЫ
ты когда говоришь разбейте както 100 рублей, задаешься потом вопросом почему в одном случае по 50 разбили, в другом по 10, втретем 50 + 5*10 ....

нет! так почему сдесь задаёшься бессмысленными вопросами - что просили то и получите, надо есчё порядок по айди, так укажи его в секции ордер бай
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему с виду одинаковые запросы по разному упорядочивают данные?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]