Как отсортировать записи в таблице по Enum полю

Standard

Есть пара способов, как отсортировать enum:

  1. Если вы хотите отсортировать в алфавитном порядке, используйте CONCAT:
    SELECT * FROM SomeTable ORDER BY CONCAT(ENUM_FIELD);
  2. Если надо использовать определенный порядок:
    ORDER BY FIELD(ENUM_FIELD, 'FIRST_VAL', 'SECOND_VAL', 'THIRD_VAL');
  3. Еще один случай, к примеру вам надо отсортировать следующим образом: есть столбец column, первыми идут значения ‘red’, затем любые кроме ‘yellow’ в конце ‘yellow’, внутри каждой группы сортировать по столбцу name :
    ORDER BY CASE color
    WHEN 'YELLOW' THEN 3
    WHEN 'RED' THEN 1
    ELSE 2
    END, name

Это все проверено на mysql, я видел в инете люди ругались на 3 решение используя db2 базу данных.

MySQL multiple insert производительность

MySQL
Standard

Производительность приложений — это моя страсть. Нашел у себя в архиве тесты mysql insert`а, тупо по одной строке и групповой вставки (multiple isnert), кто не знает это происходит таким образом:

INSERT INTO sometable (col1, col2, col3)
VALUES (1, 2, 3), (2, 3, 4), (5, 6, 7)

и тд.
К сожалению кода к-ый тестировался не осталось. Слева вставка единичной строки по циклу, справа — групповая вставка.
Количество элементов 1000:

0.102933      0.010

0.10104       0.009

0.08725     0.008

Количество элементов 10000:

1.00147199    0.051

0.9707269 0.033

0.99237   0.036

0.74959   0.0317

0.77398   0.054

0.975111   0.042

Количество элементов 100000:

9.77275   0.312

9.369932   0.317

9.29440   0.324

При большем количестве элементов mysql ругается что пакет такого размера не может уложить в буффер. Итак, по результатам можно судить об увеличение скорости минимум раз в 10. С другой стороны, не всегда требуется вставка большого количества строк. Это можно использовать в случае очередей, или вставка из кеша, когда вы вставляете значения в кеш минуя бд (знаю, это не правильно) а потом раз в минуту записываете данные из кеша в бд.