Что делает ключевое слово COLLATE при создании индекса sqlite? - PullRequest
9 голосов
/ 29 апреля 2009

Согласно документации sqlite3 ,

Предложение COLLATE, следующее за каждым имя столбца определяет сортировку последовательность, используемая для ввода текста в этом колонка. Последовательность сортировки по умолчанию последовательность сортировки, определенная для этот столбец в CREATE TABLE заявление. Или, если нет последовательности сортировки иначе определяется, встроенный Двоичная последовательность сортировки используется.

Что делает последовательность упорядочения и что такое двоичная последовательность упорядочения?

Ответы [ 2 ]

5 голосов
/ 29 апреля 2009

Это способ, которым движок sql упорядочивает данные внутри. Бинарная сортировка делает то, что предлагает, она выполняет двоичное сравнение. Как правило, это самое быстрое сопоставление, хотя я никогда не определял его количественно, так как он проверяет битовые комбинации, что означает, что он не зависит от регистра и ударения.

2 голосов
/ 06 августа 2015

Двоичная сортировка сравнивает вашу строку побайтно, как в таблице Юникод. Например: A, B, a, b. Порядок с учетом регистра будет: a, A, b, B.

Преимуществом двоичного сопоставления является его скорость, поскольку сравнение строк очень простое / быстрое. В общем случае индексы с двоичным кодом могут не давать ожидаемых результатов для сортировки, однако для точных совпадений они могут быть полезны.

COLLATE NOCASE также влияет на запросы, чувствительные к регистру.

Если у вас есть столбец со следующими значениями: 'aa', 'aA'

select * from table where col = 'aa'

Если вы создали столбец с COLLATE NOCASE, он вернет оба значения 'aa' и 'aA'. В противном случае, если вы не укажете его, он вернет только «aa».

Вы также можете указать его в запросе (это медленнее, чем если бы вы создали столбец с COLLATE NOCASE)

select * from table where col = 'aa' COLLATE NOCASE
...