MySQL версии 5.6.25 - проблемы с производительностью запросов Select where order limit. Начал пытаться смотреть что к чему. Судя по времени выполнения различных запросов, складывается впечатление, что сперва выполняется ORDER, затем в цикле ( SELECT, затем WHERE), цикл длится до тех пор, пока не будет достигнут LIMIT. Можно как-то заставить сперва выполнять WHERE, потом ORDER BY, потом SELECT LIMIT ? Как я это понял. Создал таблицу: CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `rating1` int(11), `rating2` int(11), `text` varchar(240) CHARACTER SET utf8 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `test` ADD PRIMARY KEY (`id`), ADD KEY `rating1` (`rating1`), ADD KEY `rating2` (`rating2`); Затем накидал в нее данных: INSERT INTO `test`(`rating1`, `rating2`, `text`) VALUES (round(7654321*rand(),0),round(7654321*rand(),0),repeat(md5(rand()),6)); - повторить несколько сотен тысяч раз. Затем создал особый порядок данных в таблице: UPDATE test SET rating2=NULL WHERE rating1>3500000; А затем запустил два запроса: SELECT * FROM test WHERE rating2 IS NOT NULL ORDER by rating1 DESC LIMIT 10; - выполняется долго. SELECT * FROM test WHERE rating2 IS NOT NULL ORDER by rating1 ASC LIMIT 10; - выполняется быстро - ни чем иным такое поведение, кроме как сперва выполнение ORDER, затем SELECT LIMIT, pзатем WHERE я объяснить это не могу.
Добрый день! Повтрил Ваш эксперимент. Создал такую же таблицу (MySQL 5.7 - Win10) Записал 114914 записей. В PhpMyAdmin Это запрос не делал (rating2 во всех записях NOT NULL) Код (Text): UPDATE test SET rating2=NULL WHERE rating1>3500000; В PhpMyAdmin несколько раз протестировал два запроса с DESC и ASC. При повторение запросов наблюдается разброс по времени, но продолжительность в обоих случаях совпадает. Код (Text): SELECT * FROM test WHERE rating2 IS NOT NULL ORDER by rating1 DESC LIMIT 10; Zeige Datensätze 0 - 9 (10 insgesamt, Die Abfrage dauerte 0,0001 Sekunden.) [rating1: 7654201... - 7653750...] SELECT * FROM test WHERE rating2 IS NOT NULL ORDER by rating1 ASC LIMIT 10; Zeige Datensätze 0 - 9 (10 insgesamt, Die Abfrage dauerte 0,0001 Sekunden.) [rating1: 28... - 786...] DE: Zeige Datensätze 0 - 9 (10 insgesamt, Die Abfrage dauerte 0,0001 Sekunden.) [rating1: 28... - 786...] RU: Показаны записи 0–9 (всего 10, запрос занял 0,0001 секунды.) Удачи!