Использование UUID и настроек Oracle NLS_COMP & NLS_SORT - PullRequest
1 голос
/ 02 марта 2011

Мои таблицы используют UUID в качестве первичных ключей и сохраняют их в БД Oracle как CHAR (36).Большинство таблиц содержат столбцы NVARCHAR, которые могут быть на любом языке.Я хотел бы поддержать сортировку на естественном языке для этих столбцов, и я делаю это, устанавливая NLS_SORT и NLS_COMP в сеансе оракула (через ALTER SESSION).Проблема, с которой я сталкиваюсь, заключается в том, что oracle не будет использовать двоичные индексы для столбцов UUID и всегда будет выполнять полное сканирование таблиц.

Есть ли способ получить качество сортировки без потери двоичных индексов?Одно решение, которое я нашел, использует RAW (16) для представления UUID, в этом случае Oracle будет использовать двоичные индексы независимо от NLS sort / comp.Но я надеялся, что есть лучшая альтернатива.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Можете ли вы описать окружающую среду немного подробнее?

Если вы храните разные языки в одном и том же столбце, то любая форма лингвистической сортировки будет затруднена (т. Е. У вас есть смесь французского и немецкого языков, вы сортируете по «французскому» или «немецкому») )?

Кроме того, зачем использовать NVARCHAR? Если у вас есть многобайтовый набор символов по умолчанию, тогда VARCHAR сохранит все необходимые символы.

RAW (16), очевидно, намного меньше, чем CHAR (36), и намного ближе к «родному» формату UUID (хотя число также может работать). Шестнадцатеричная форма - это скорее вопрос презентации, и я не буду использовать ее в качестве PK (особенно включая дефисы). Я мог бы получить это представление или виртуальный (производный) столбец в 11gR2.

Особенно в многоязычном приложении существует риск перевода набора символов при сохранении UUID в CHAR. Я даже не уверен, как должен выглядеть UUID на корейском или китайском, где буквы типа «a», «b» и «c» не являются родными.

0 голосов
/ 02 марта 2011

Если вы устанавливаете NLS_SORT и NLS_COMP для каждого сеанса, нужны ли вам индексы для использования сортировки по умолчанию?Не могли бы вы создать индекс на основе функций вместо , в котором реализована лингвистическая сортировка?

...