Как mysql упорядочивает строки с одинаковыми значениями
В моей базе данных у меня есть некоторые записи, где я сортирую по тому, что происходит с одним и тем же значением:
| col1 | timestamp |
| row1 | 2011-07-01 00:00:00 |
| row2 | 2011-07-01 00:00:00 |
| row3 | 2011-07-01 00:00:00 |
SELECT ... ORDER BY timestamp
Похоже, что результат в случайном порядке.
Является ли случайный порядок последовательным. Это означает, что если у меня есть эти данные на двух серверах mysql. Может я ожидаю тот же результат?
Ответы
Ответ 1
Я бы посоветовал не делать этого предположения. В стандартном SQL все, что не требуется явным предложением ORDER BY
, зависит от реализации.
Я не могу говорить для MySQL, но напр. SQL Server, порядок вывода для строк, которые являются "равными" в отношении ORDER BY
, может меняться каждый раз, когда выполняется запрос, и на него может влиять практически все (например, уровень патча/пакета обновления сервера, рабочая нагрузка, какие страницы в настоящее время находятся в пуле буферов и т.д.).
Итак, если вам нужен конкретный заказ, самое лучшее, что вы можете сделать (как для его гарантии, так и для документирования вашего запроса для будущих сопровождающих), явно запрашивает требуемый заказ.
Ответ 2
Довольно много ответов, но в нижней строке ответа НЕТ.
Если вы хотите, чтобы строки, возвращаемые в определенной последовательности, последовательно, затем укажите это в ORDER BY
. Без этого нет абсолютно никакой гарантии того, какие строки заказов будут возвращены.
Я думаю, что вам может не хватать, что в предложении ORDER BY может быть несколько выражений. И вы можете включать выражения, которые не входят в список SELECT.
В вашем случае, например, вы можете использовать ORDER BY timestamp, id
.
(Или некоторые другие столбцы или выражения.)
Это упорядочивает строки сначала по метке времени, а затем любые строки, которые имеют одинаковое значение для метки времени, будут упорядочены по id
или независимо от следующего выражения в этом списке.
Ответ 3
Это зависит от используемого механизма хранения. В MyISAM они будут упорядочены в натуральном порядке (т.е. Для сохранения на диске), которые могут быть изменены с помощью команды ALTER TABLE ... ORDER BY
). В InnoDB они будут заказаны ПК. Другие двигатели могут иметь свои собственные правила.
Ответ 4
В ORDER BY условие, если строки имеют одинаковые значения или если вы хотите упорядочить данные, выбирая инструкцию ORDER BY. CASE: вы хотите ORDER BY значениями столбца являются частота слов. И два слова в таблице могут иметь одинаковое значение частоты в столбце возникновения частоты. Поэтому в столбце частоты вы будете иметь две одинаковые частоты двух разных слов. Таким образом, в "select * from database_name ORDER BY frequency" вы можете найти любой из двух слов, имеющих такую же частоту, которые появляются непосредственно перед ее последним. А во втором - другое слово, которое показывалось после первого слова, появившегося ранее. Это зависит от буферной памяти, входящих и исходящих страниц в данный момент и т.д.
Ответ 5
Ответ: Нет, порядок не будет согласован. Я столкнулся с той же проблемой и решил добавить еще один столбец в раздел заказа. Убедитесь, что этот столбец уникален для каждой записи, такой как "ID" или что-то еще.
В этом случае вы должны добавить поле "ID" в свою таблицу, которое уникально для каждой записи. Вы можете назначить его "AI" (автоинкремент), чтобы вы не занимались обслуживанием.
После добавления столбца "ID" обновите последнюю часть вашего запроса, например:
SELECT mt.*
FROM my_table mt
ORDER BY mt.timestamp ASC, mt.id DESC