Я только что обновил сервер MySQL 5.0 до MySQL 5.5 и обнаружил, что сохраненные подпрограммы, которые работали раньше, сломались. Разница: MySQL 5.5, кажется, INSERT
строк в произвольном порядке. Таким образом, в следующем коде предложение ORDER BY
не действует. Насколько я знаю, раньше это было в MySQL 5.0.
INSERT INTO MyTable
SELECT * FROM MyOtherTable ORDER BY Col1, Col2 DESC;
Люди говорят, что по определению порядок не имеет значения в INSERT
s : Просто используйте ORDER BY
при использовании SELECT
из таблицы. Проблема в том, что я использую курсор для зацикливания таблицы и выполнения сложных операций. Конечно, вместо этого я могу поместить оператор ORDER BY
в определение курсора:
DECLARE cur CURSOR FOR SELECT * FROM MyTable ORDER BY Col1, Col2 DESC;
Но это замедляет процедуру: с 10 секунд в MySQL 5.0 до более 10 минут в MySQL 5.5.
Любые идеи о том, как решить проблему?
INSERT ... SELECT
, но при этом утверждаете, что используете курсор. Что является правдой? При использованииinsert ... select
нет смысла использоватьorder by
. Зачем нужен порядок при использовании курсора? - person a_horse_with_no_name   schedule 13.02.2013MyTable
, который получил данные отSELECT
сORDER BY
. Так что оба верны. - person Gruber   schedule 13.02.2013insert .. select
. Но почему вы (думаете) вам нужен этот приказ? - person a_horse_with_no_name   schedule 13.02.2013INSERT...SELECT
:INSERT INTO MyTable SELECT * FROM MyOtherTable ORDER BY Col1, Col2 DESC;
И затем курсор:DECLARE cur CURSOR FOR SELECT * FROM MyTable
. - person Gruber   schedule 13.02.2013order by
из первого шага. Это совершенно бесполезно. - person a_horse_with_no_name   schedule 13.02.2013