Большая часть сортировки выполняется по схеме, основанной на атрибуте реальной таблицы - первичный ключ, дата создания, зарплата. Иногда возникает необходимость нарушить схему сортировки по деловым причинам. Классическим примером являются выпадающие списки СТРАН на веб-сайтах: все страны перечислены в алфавитном порядке, за исключением Соединенных Штатов, которые идут первыми. Это отражает размер и важность американской клиентской базы (по крайней мере, для англоязычных веб-сайтов).
В мире всего 196 стран (ну, , вероятно, ), так что было бы не слишком сложно навязать схему произвольной сортировки всем, а не только США. Но действительно ли ваш пользователь назначит предпочтительный порядок сортировки для каждой из ~ 20 миллионов записей? Это кажется маловероятным. Вероятно, им нужен автономный порядок сортировки с возможностью переопределения для определенных предпочтительных записей (например, код страны для США).
Если это так, то вам нужен один столбец , который необязателен . Пользователь назначает преференциальный порядок для записей, которые ему небезразличны, а остальные оставляются по умолчанию, скажем, с уникальным порядком ключей. Как это:
select * from big_table
order by nvl2(overriding_sort_order, 9999), uniquw_key
/
Конечно, если пользователь хочет изменить overriding_sort_order для одной записи, ему придется обрабатывать пульсации вверх / вниз - или вам придется обрабатывать это для них. Дело в том, что затрагивается только относительная горстка записей, а не вся таблица.
«А как насчет порядка предпочтения? 3 кредитных карты, по которым я заказываю
предпочитаю использовать. Или список DVD, показывающий, что я предпочел бы получить
следующий. "
Порядок предпочтений для отдельного пользователя - это другой бизнес-пример. «Три кредитные карты» - это отличный пример от «20 миллионов» записей, приведенных в первоначальном вопросе.
Итак, давайте поговорим о вашем примере с DVD. Вы не заказываете весь инвентарь LoveFilm, вы создаете таблицу, которая идентифицирует и сортирует очень маленький набор доступных DVD-дисков для каждого пользователя: что-то вроде:
USER_WISH_LIST
--------------
User_id
DVD_id
Preferred order
Количество DVD, которое будет указывать каждый пользователь, вероятно, будет небольшим или около того, поскольку порядок сортировки применяется только к выбранным пользователем DVD-дискам. Таким образом, накладные расходы на перенастройку столбца PREFERRED_ORDER, если пользователь решит, что они хотят посмотреть Улыбка Моны Лизы до Соломенные псы и после Helvetica , а не после Johnny Mnemonic и до Man on Wire , отлично управляемы.