Как 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