Функции для каждой строки - плохая идея в любой базе данных, которую вы хотите хорошо масштабировать. Это потому, что они должны выполнить вычисления для каждой строки, которую вы извлекаете каждый раз, когда вы делаете select
.
Интеллектуальный способ администратора баз данных - создать новый столбец, содержащий вычисленный ключ сортировки, и использовать триггер вставки / обновления, чтобы убедиться, что он установлен правильно. Означает, что расчет выполняется только при необходимости и амортизирует его стоимость для всех вариантов выбора.
Это один из немногих случаев, когда можно вернуться из третьей нормальной формы, поскольку использование триггеров предотвращает несогласованность данных. Едва ли кто-то жалуется на дисковое пространство, занимаемое их базами данных, подавляющее большинство вопросов касается скорости.
И, используя этот метод и индексируя новый столбец, ваши запросы будут абсолютно кричать.
Таким образом, вы создаете еще один столбец с именем natural_title
, отображаемый следующим образом:
title natural_title
----- -------------
title 1 title 00001
title 2 title 00002
title 10 title 00010
title 1024 title 01024
гарантирует, что функция отображения, используемая в триггере, позволяет максимально допустимое значение. Затем вы используете запрос как:
select title from articles
order by natural_title asc