Cортируем ORDER BY `price`, но есть одинаковые цены в таблиц, из какого принципа сортируется строки

  • Автор темы Автор темы peon
  • Дата начала Дата начала

peon

Lok'tar ogar
Допустим, что cортируем выборку с помощью ORDER BY `price` DESC, и есть записи с одинаковыми значениями цены в таблице.
Я раньше предполагал, что, например, строки в таблице, содержащие одинаковые цены, будут сортироваться по возрастанию их ключа. Но из интереса поиграл с данными в мускуле, оказалось это не так.
Пока пришел к выводу, что сортируется по последующим полям в порядке возрастания, даже не обязательно включать их в выборку. Но есть предчувствие, что это ложный вывод.
Какой логике делается порядок выборки в таком случае?
Пытался сам выяснить, например тут http://dev.mysql.com/doc/refman/5.7/en/sorting-rows.html но там мой вопрос вовсе не раскрывается.
 
Код:
SELECT *
FROM `example`
ORDER BY `example`.`a` ASC
LIMIT 0 , 30

GEP9YHM.png


Структура и данные.

Код:
CREATE TABLE IF NOT EXISTS `example` (
  `id` int(11) NOT NULL,
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `example` (`id`, `a`, `b`, `c`) VALUES
(1, 500, 64, 5),
(2, 750, 128, 14),
(3, 500, 64, 5),
(4, 600, 128, 14),
(5, 600, 128, 8),
(6, 750, 128, 20),
(7, 500, 32, 10),
(8, 450, 64, 8),
(9, 450, 32, 10),
(10, 500, 32, 10),
(11, 900, 128, 40),
(12, 800, 128, 20);
 
Походу по порядку создания, типа по порядку места на диске. А если диск фрагментированый то можна считать беспорядочно?) Чисто мои домысли
 
А нет если фрагментированый то до сраки, просто дольше читатся будет
 
если индекс есть на сортируемое поле, то в порядке хранения в индексе будет, b-tree сбалансированное дерево, никак не завязанное на id
если в индексе нет, то будет fullscan и по идее порядок не поменяется
 
Сверху