Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 286 сообщений
Cообщения с меткой

сортировка - Самое интересное в блогах

Следующие 30  »
amwhoket

Как отсортировать по алфавиту

Суббота, 17 Сентября 2016 г. 08:12 (ссылка)

Сортировка в алфавитном порядке - достаточно часто встречающаяся операция, поэтому она предусмотрена в большинстве современных офисных приложений. Некоторые из таких программ осуществляют только элементарное упорядочивание строк - это обычно приложения, ориентированные на работу с текстом. Другие могут сортировать строковые переменные, размещенные в электронных таблицах. ЧИТАТЬ ДАЛЬШЕ>>>



Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
marbgohy

Как заполнять конверты

Пятница, 16 Сентября 2016 г. 20:05 (ссылка)

Правильное заполнение конверта необходимо для того, чтобы ваше письмо дошло до адресата без проблем и задержек. Правила заполнения особенно важны при современных технологиях сортировки почты. От этого зависит скорость обработки и доставки вашего сообщения. ЧИТАТЬ ДАЛЬШЕ>>>



Комментарии (0)КомментироватьВ цитатник или сообщество
sersnola

Как в Word сделать по алфавиту

Четверг, 15 Сентября 2016 г. 16:46 (ссылка)

В приложении Wicrosoft Office Word множество трудоемких операций можно сделать за несколько кликов мыши. Если вы создали список и теперь хотите расположить в нем пункты по алфавиту, воспользуйтесь инструментами редактора. ЧИТАТЬ ДАЛЬШЕ>>>



Комментарии (0)КомментироватьВ цитатник или сообщество
apgledom

Как в Word сделать список по алфавиту

Четверг, 15 Сентября 2016 г. 15:51 (ссылка)

Как отсортировать по алфавиту. Текстовый процессор Microsoft Office Word не предназначен для упорядочивания вводимых пользователем данных. Однако в текстовых документах нередко приходится создавать алфавитные списки, поэтому в программу добавлена функция сортировки строк. Пользоваться ею достаточно просто, и вряд ли такая сортировка вызовет затруднение даже у начинающего пользователя Word. ЧИТАТЬ ДАЛЬШЕ>>>



Комментарии (0)КомментироватьВ цитатник или сообщество
lespfacond

Как узнать почтовый индекс

Воскресенье, 11 Сентября 2016 г. 16:29 (ссылка)

Что такое почтовый индекс? Это набор символов, который при отправке письма добавляется к почтовому адресу. Нужен он для того, чтобы сортировка почтовых отправлений происходила быстрее и проще. В России почтовый индекс состоит из шести цифр. Первые три означают код города, последние - номер почтового отделения. В крупных городах (таких, как Москва) может быть несколько кодов городов. ЧИТАТЬ ДАЛEE>>>



Комментарии (0)КомментироватьВ цитатник или сообщество
abtremworl

Как отсортировать по алфавиту

Суббота, 03 Сентября 2016 г. 11:57 (ссылка)

Сортировка в алфавитном порядке - достаточно часто встречающаяся операция, поэтому она предусмотрена в большинстве современных офисных приложений. Некоторые из таких программ осуществляют только элементарное упорядочивание строк - это обычно приложения, ориентированные на работу с текстом. Другие могут сортировать строковые переменные, размещенные в электронных таблицах. ЧИТАТЬ ДАЛЬШЕ>>>



Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
abtremworl

Как заполнять конверты

Пятница, 02 Сентября 2016 г. 21:13 (ссылка)

Правильное заполнение конверта необходимо для того, чтобы ваше письмо дошло до адресата без проблем и задержек. Правила заполнения особенно важны при современных технологиях сортировки почты. От этого зависит скорость обработки и доставки вашего сообщения. ЧИТАТЬ ДАЛЬШЕ>>>



Комментарии (0)КомментироватьВ цитатник или сообщество
thalpolsta

Как в Word сделать по алфавиту

Пятница, 02 Сентября 2016 г. 14:40 (ссылка)

В приложении Wicrosoft Office Word множество трудоемких операций можно сделать за несколько кликов мыши. Если вы создали список и теперь хотите расположить в нем пункты по алфавиту, воспользуйтесь инструментами редактора. ЧИТАТЬ ДАЛЬШЕ>>>



Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kreozot213

Как в Word сделать список по алфавиту

Пятница, 02 Сентября 2016 г. 14:03 (ссылка)

Как отсортировать по алфавиту. Текстовый процессор Microsoft Office Word не предназначен для упорядочивания вводимых пользователем данных. Однако в текстовых документах нередко приходится создавать алфавитные списки, поэтому в программу добавлена функция сортировки строк. Пользоваться ею достаточно просто, и вряд ли такая сортировка вызовет затруднение даже у начинающего пользователя Word. ЧИТАТЬ ДАЛЬШЕ>>>



Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kacounpa

Как указывать адрес

Среда, 31 Августа 2016 г. 14:37 (ссылка)

Как указывать адрес. Для того чтобы отправленная вами посылка, денежный перевод, письмо или телеграмма дошли вовремя к нужному абоненту, важно указывать правильные реквизиты. Почта России внедряет новые автоматизированные технологии сортировки отправлений. Четко писать адрес получателя необходимо. Если адрес указан неверно, то почтовое отправление вернется отправителю. ЧИТАТЬ ДАЛЬШЕ>>>



Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Что скрывает Array#sort: реверс-инжиниринг подручными средствами

Вторник, 21 Июня 2016 г. 11:51 (ссылка)

Как вам, возможно, известно, спецификация языка JavaScript не предписывает какой-то определённой реализации метода sort у массивов. Алгоритм, находящийся «под капотом», может отличаться (и отличается) в различных браузерах. Теоретически, можно представить себе ситуацию, когда от того, как именно реализована сортировка массивов в конкретном движке, зависит производительность вашего веб-приложения.

Скрытый текст
Очень сильно сомневаюсь, что так может случиться на практике, но как человек, написавший в своё время определённое количество курсовых и дипломных работ, я просто не смог обойтись без секции «применение в народном хозяйстве».



Если речь идёт о браузере с открытым исходным кодом, то можно просто открыть этот код и посмотреть, какой там использован алгоритм. Однако существуют браузеры с закрытым исходным кодом (не будем показывать пальцем). Что делать в таком случае?



Поскольку мы на Хабре, я готов предположить, что некоторые читатели уже потянулись к своим любимым дизассемблерам, в то время как некоторые другие готовятся звонить своим друзьям из одной небольшой и нетвёрдой компании. Однако сегодня мы не будем копаться в машинном коде или использовать инсайдерскую информацию. Мы будем смотреть весёлые картинки.







Существует возможность узнать кое-что о реализации метода sort прямо внутри скрипта. Она состоит в том, что этот метод принимает в качестве аргумента компаратор — функцию двух переменных, возвращающую числовое значение, на основании которого алгоритм сортировки делает вывод, какой из аргументов больше. Это позволяет сортировать массивы произвольных объектов, а не только чисел или строк. Также, что важно в нашем случае, это позволяет узнать, какие именно элементы массива и в каком порядке метод sort сравнивает между собой. Например, так:



function compare(a, b){
console.log(a, b);
return a - b;
}




Однако мало получить данные, нужно ещё придумать, как их интерпретировать. Когда я в последний раз заходил в книжный магазин, там не было книги под названием «Классификация алгоритмов сортировки на основании того, какие элементы они сравнивают между собой, для чайников». Возможно, с тех пор она там и появилась, но я решил обойтись без неё и положиться на способность человека распознавать визуальные паттерны.



Будем делать так: возьмём некий массив, затем отсортируем его с помощью специально обученного компаратора, который сохраняет данные о каждом сравнении. Затем возьмём эти данные и построим на их основании следующую диаграмму: для каждого сравнения, в котором участвовали элементы с индексами a и b (имеются в виду индексы этих элементов в уже отсортированном массиве), мы отметим точку с координатами (a, b). Заодно отметим точку с координатами (b, a), чтобы было красиво и чтобы вид диаграммы не зависел от мелких деталей реализации. Причём точка будет не простая, а цветная: её цвет будет символизировать то, когда произошло это сравнение. Сравнения, случившиеся в самом начале сортировки, отметим красным, те, что ближе к концу — синим, а между ними будут прочие цвета радуги.



Как ни странно, этот план оказался не таким уж дурацким. Я реализовал несколько наиболее распространённых алгоритмов, и они действительно давали чётко различимые паттерны. Вот, например, сортировка выбором (selection sort):







А так выглядит пузырьковая сортировка (bubble sort). Отличие хорошо различимо, и, в принципе, нетрудно понять, откуда оно берётся.







И тот, и другой — неэффективные алгоритмы сортировки (средняя временная сложность — О(n2)). Более продвинутые алгоритмы используют меньшее количество сравнений, потому диаграмма получается менее закрашенной. В начале статьи приведена диаграмма для пирамидальной сортировки (heap sort), на ней куда больше белых пикселей.



Каждая сортировка обладает своим узнаваемым паттерном. Плавный градиент у сортировки выбором, градиент с небольшими поперечными полосами у пузырьковой сортировки, полосы разного цвета у сортировки вставками (insertion sort). Быстрая сортировка (quicksort) всё расчерчивает крестиками, сортировка бинарным деревом (tree sort) — похожими крестиками, но не монотонными, а пёстрыми. У сортировки слиянием (merge sort) характерные короткие синие полосы ближе к диагонали. Диаграмма пирамидальной сортировки напоминает сортировку слиянием, но имеет выраженный цветовой градиент.



«Однако что там насчёт браузеров?» — спросит меня пытливый читатель, не забывший ещё, с чего начиналась статья. Специально для таких читателей я сделал страничку, где можно посмотреть диаграмму Array#sort в своём текущем браузере и сравнить её с диаграммами некоторых известных алгоритмов.



Если вкратце:




  • Свежий Firefox использует сортировку слиянием (merge sort), но на достаточно малых массивах переключается на нечто, напоминающее сортировку вставками (insertion sort). Можете проверить это самостоятельно, добавив к URL странички "?size=4" (без кавычек, естественно).

  • Свежий десктопный Chrome использует быструю сортировку (quicksort). Однако на iOS он же использует сортировку слиянием.

  • Safari на MacOS и iOS также использует сортировку слиянием

  • Яндекс.Браузер использует сортировку слиянием

  • И старая Opera также использует сортировку слиянием





«Однако что там насчёт Internet Explorer?» — спросит меня пытливый читатель. Что ж, я знал, что до этого вопроса когда-нибудь дойдёт… С IE вышел конфуз. Полученные в IE11 и Edge диаграммы не совпадают ни с одним из реализованных алгоритмов. Выглядят они как-то так:







Есть что-то общее с сортировкой AVL-деревом, но чёткого совпадения нет. Однако я не теряю надежды и продолжаю впиливать в свою страничку новые алгоритмы. А если у вас чешутся руки мне помочь, я охотно приму ваши пулл реквесты.



На текущий момент это всё, что я имею сказать. Надеюсь, вам было интересно.
Original source: habrahabr.ru.

https://habrahabr.ru/post/303748/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Таблицы сортировок в СУБД Cach'e

Пятница, 25 Марта 2016 г. 18:57 (ссылка)

Зато какая сортировка!

(А. С. Пушкин)




Если бы это была запись для твиттера, то она была бы следующей: «Программисты на Cach'e ObjectScript! Используйте Cyrillic4 вместо Cyrillic3!». Но тут Хабр, поэтому придётся развернуть мысль – добро пожаловать под кат.



Всё в Cach'e хранится в глобалах. Данные, метаданные, классы, программы. Узлы глобала сортируются по значениям индексов (subscript) и сохраняются на диске не в том порядке, в котором их вставили, а в отсортированном — для быстрого поиска:



USER>set ^a(10)=""

USER>set ^a("фф")=""

USER>set ^a("бб")=""

USER>set ^a(2)=""

USER>zwrite ^a
^a(2)=""
^a(10)=""
^a("бб")=""
^a("фф")=""


При сортировке Cach'e различает числа и строки — 2 рассматривается как число и сортируется перед 10. Команда zwrite и функции $Order и $Query выводят индексы глобала в том порядке, в котором они хранятся на диске: сначала пустая строка, затем отрицательные числа, ноль, положительные числа, затем строки в порядке, определяемом таблицей сортировки (collation).



В простейшем случае таблица сортировки сопоставляет каждому символу некоторый порядковый номер. Далее таблицу сортировки я буду называть сортировкой.



Стандартная сортировка в Cach'e так и называется — Cach'e standard. Она сопоставляет каждому символу его код в Unicode.



Сортировка, с которой создаются локальные массивы в текущем процессе, определяется локалью (Портал Управления > Администрирование Системы > Конфигурация > Настройка поддержки национальных языков). Для rusw — русской локали юникодных инсталляций Cach'e — таблица сортировки по умолчанию — Cyrillic3. Другие возможные сортировки в rusw — Cach'e standard, Cyrillic1, Cyrillic3, Cyrillic4, Ukrainian1.



Метод ##class(%Collate).SetLocalName() меняет сортировку для локальных массивов текущего процесса:



USER>write ##class(%Collate).GetLocalName()
Cyrillic3
USER>write ##class(%Collate).SetLocalName("Cache standard")
1
USER>write ##class(%Collate).GetLocalName()
Cache standard
USER>write ##class(%Collate).SetLocalName("Cyrillic3")
1
USER>write ##class(%Collate).GetLocalName()
Cyrillic3


У каждой сортировки есть парная, в которой числа сортируются как строки. Имя такой парной сортировки получается добавлением " string" к имени оригинальной сортировки:



USER>write ##class(%Collate).SetLocalName("Cache standard string")
1
USER>kill test

USER>set test(10) = "", test(2) = "", test("фф") = "", test("бб") = ""

USER>zwrite test
test(10)=""
test(2)=""
test("бб")=""
test("фф")=""

USER>write ##class(%Collate).SetLocalName("Cache standard")
1
USER>kill test

USER>set test(10) = "", test(2) = "", test("фф") = "", test("бб") = ""

USER>zwrite test
test(2)=""
test(10)=""
test("бб")=""
test("фф")=""


Cach'e standard и Cyrillic3



В Cach'e standard символы сортируются в порядке их кодов Unicode:



 write ##class(%Library.Collate).SetLocalName("Cache standard"),!
write ##class(%Library.Collate).GetLocalName(),!
set letters = "абвгдеёжзийклмнопрстуфхцчщщьыъэюя"
set letters = letters _ $zconvert(letters,"U")
kill test

//заполняем test данными
for i=1:1:$Length(letters) {
set test($Extract(letters,i)) = ""
}

//выводим индексы массива test в отсортированном порядке
set l = "", cnt = 0
for {
set l = $Order(test(l))
quit:l=""
write l, " ", $Ascii(l),","
set cnt = cnt + 1
write:cnt#8=0 !
}


USER>do ^testcol
1
Cache standard
Ё 1025,А 1040,Б 1041,В 1042,Г 1043,Д 1044,Е 1045,Ж 1046,
З 1047,И 1048,Й 1049,К 1050,Л 1051,М 1052,Н 1053,О 1054,
П 1055,Р 1056,С 1057,Т 1058,У 1059,Ф 1060,Х 1061,Ц 1062,
Ч 1063,Щ 1065,Ъ 1066,Ы 1067,Ь 1068,Э 1069,Ю 1070,Я 1071,
а 1072,б 1073,в 1074,г 1075,д 1076,е 1077,ж 1078,з 1079,
и 1080,й 1081,к 1082,л 1083,м 1084,н 1085,о 1086,п 1087,
р 1088,с 1089,т 1090,у 1091,ф 1092,х 1093,ц 1094,ч 1095,
щ 1097,ъ 1098,ы 1099,ь 1100,э 1101,ю 1102,я 1103,ё 1105,


Все буквы на своём месте, кроме букв «ё» и «Ё». Их коды в Unicode выбиваются из общего порядка. Поэтому для русской локали понадобилась своя таблица сортировки — Cyrillic3, в которой буквы идут в том же порядке, как и в русском алфавите:




USER>do ^testcol
1
Cyrillic3
А 1040,Б 1041,В 1042,Г 1043,Д 1044,Е 1045,Ё 1025,Ж 1046,
З 1047,И 1048,Й 1049,К 1050,Л 1051,М 1052,Н 1053,О 1054,
П 1055,Р 1056,С 1057,Т 1058,У 1059,Ф 1060,Х 1061,Ц 1062,
Ч 1063,Щ 1065,Ъ 1066,Ы 1067,Ь 1068,Э 1069,Ю 1070,Я 1071,
а 1072,б 1073,в 1074,г 1075,д 1076,е 1077,ё 1105,ж 1078,
з 1079,и 1080,й 1081,к 1082,л 1083,м 1084,н 1085,о 1086,
п 1087,р 1088,с 1089,т 1090,у 1091,ф 1092,х 1093,ц 1094,
ч 1095,щ 1097,ъ 1098,ы 1099,ь 1100,э 1101,ю 1102,я 1103,


В Cach'e ObjectScript есть специальный бинарный оператор ]] — «сортируется после». Он возвращает 1, если в индексе массива левый аргумент будет размещен после правого аргумента, иначе 0:



USER>write ##class(%Library.Collate).SetLocalName("Cache standard"),!
1
USER>write "А" ]] "Ё"
1
USER>write ##class(%Library.Collate).SetLocalName("Cyrillic3"),!
1
USER>write "А" ]] "Ё"
0


Глобалы и таблицы сортировок



Разные глобалы в одной и той же базе данных могут иметь разную сортировку. У каждой базы данных есть настройка — сортировка для новых глобалов. Сразу после инсталляции у всех баз кроме USER сортировка по умолчанию для новых глобалов — Cach'e standard. Для USER — в зависимости от локали инсталляции. Для rusw — Cyrillic3.



Создание глобала с сортировкой отличной от сортировки по умолчанию для данной базы:



USER>kill ^a
USER>write ##class(%GlobalEdit).Create(,"a",##class(%Collate).DisplayToLogical("Cache standard"))


В списке глобалов в Портале управления (Обозреватель Системы > Глобалы) для каждого глобала показывается его сортировка (четвёртый столбец).



Нельзя поменять сортировку существующего глобала. Нужно создать глобал с новой сортировкой и скопировать данные из старого глобала командой merge. Массовую конвертацию глобалов из одной сортировки в другую можно сделать методом ##class(SYS.Database).Copy()



Cyrillic4, Cyrillic3 и умляуты



В процессе эксплуатации Cyrillic3 выяснилось, что преобразование текстового индекса во внутренний формат происходит дольше, чем в сортировке Cach'e standard, поэтому вставка и навигация по глобалу (или локальному массиву) с сортировкой Cyrillic3 выполняется медленней. Была создана новая сортировка Cyrillic4, доступная с версии 2014.1. Порядок букв кириллицы в ней такой же, как и в Cyrillic3, но Cyrillic4 заметно быстрее.



for collation="Cyrillic3","Cyrillic4","Cache standard","Cyrillic1" {
write ##class(%Library.Collate).SetLocalName(collation),!
write ##class(%Library.Collate).GetLocalName(),!
do test(100000)
}
quit
test(C)
set letters = "абвгдеёжзийклмнопрстуфхцчщщьыъэюя"
set letters = letters _ $zconvert(letters,"U")

kill test
write "test insert: "
// заполняем test данными
set z1=$zh
for c=1:1:C {
for i=1:1:$Length(letters) {
set test($Extract(letters,i)_"плюс длинное русское слово" _ $Extract(letters,i)) = ""
}
}
write $zh-z1,!

//перебираем индексы массива test
write "test $Order: "
set z1=$zh
for c=1:1:C {
set l = ""
for {
set l = $Order(test(l))
quit:l=""
}
}
write $zh-z1,!


USER>do ^testcol
1
Cache standard
test insert: 1.520673
test $Order: 2.062228
1
Cyrillic3
test insert: 3.541697
test $Order: 5.938042
1
Cyrillic4
test insert: 1.925205
test $Order: 2.834399


Cyrillic4 пока не является сортировкой по умолчанию в локали rusw, но, создав свою локаль на базе rusw, можно указать Cyrillic4 сортировкой по умолчанию для локальных массивов. Или указать Cyrillic4 сортировкой по умолчанию для новых глобалов в настройках базы данных.



Cyrillic3 медленнее Cach'e standard и Cyrillic4, потому что в её основе лежит алгоритм более общий, чем сортировка двух строк в зависимости от кодов соответствующих символов этих строк.



В немецком языке при сортировке буква ss должна восприниматься как ss. В Cach'e так и работает:



USER>write ##class(%Collate).GetLocalName()
German3
USER>set test("Strasser")=1
USER>set test("Strasser")=1
USER>set test("Straster")=1
USER>zwrite test
test("Strasser")=1
test("Strasser")=1
test("Straster")=1


Обратите внимание на порядок строк. А именно, что первые четыре буквы первой строки — «Stras», затем «Strass», затем опять «Stras». Такого порядка нельзя достичь, если каждой букве сопоставлять некоторый код.



Нам с вами повезло с русским языком — в нём нет умляутов или букв, которые могут сортироваться одинаково, как, например, v и w в финском языке. В русском языке достаточно дать каждой букве номер, и сравнивать строки по номерам букв на соответствующих позициях. За счёт этого и получилось выиграть в скорости в Cyrillic4.



Таблицы сортировок и SQL



Не путайте таблицу сортировки в глобалах и сортировку (тоже collation) для столбца в SQL. Вторая сортировка — преобразование, применяемое к значению, перед тем как положить его в индексный глобал или сравнить с другим значением. В Cach'e SQL сортировка по умолчанию для строк — SQLUPPER. Это преобразование переводит все буквы в верхний регистр, удаляет пробельные символы в конце и добавляет один пробел в начало строки. Три другие SQL сортировки (EXACT, SQLSTRING, TRUNCATE) описаны в документации.


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



Основное правило одно — чтобы ORDER BY в запросах SQL возвращал строки в ожидаемом порядке, сортировка глобалов, в которых хранятся данные и индексы таблиц, участвующих в запросе должна быть такой же как сортировка по умолчанию для базы CACHETEMP и сортировка локальных массивов. Подробнее — смотрите абзац в документации «SQL and NLS Collations».



Создадим тестовый класс:



Class Habr.test Extends %Persistent
{

Property Name As %String;

Property Surname As %String;

Index SurInd On Surname;

ClassMethod populate()
{
do ..%KillExtent()

set t = ..%New()
set t.Name = "Павел", t.Surname = "Ёлкин"
write t.%Save()

set t = ..%New()
set t.Name = "Пётр", t.Surname = "Иванов"
write t.%Save()

set t = ..%New()
set t.Name = "Прохор", t.Surname = "Александров"
write t.%Save()
}

}


Внесём данные (можете потом поменять имена на строки из немецкого примера):



USER>do ##class(Habr.test).populate()


Выполним запрос:





Результат неожиданный. Главный вопрос — почему не алфавитный порядок имён (Павел, Пётр, Прохор)? Смотрим план запроса:





Ключевые слова в этом плане — «populates temp-file». Для выполнения запроса оптимизатор SQL решил использовать временную структуру — temp-file — глобал (в некоторых случаях локальный массив), видный только текущему процессу (process-private global). В индексы этого глобала помещаются значения и потом выводятся в отсортированном порядке. Временные глобалы хранятся в базе CACHETEMP, сортировка дла новых глобалов в которой — Cach'e standard. Но почему «ё» в начале, а не в конце? В индексы временного глобала кладётся значение поля name приведённое к верхнему регистру (SQLUPPERпреобразование по умолчанию для строк), соответственно буква Ё будет идти в самом начале.



Отменив автоматические преобразование (функция %Exact), получим всё ещё неправильный, но хотя бы ожидаемый порядок — «ё» сортируется после всех букв





Не будем пока исправлять таблицу сортировки в CACHETEMP — проверим запросы с surname. Ведь на этот столбец есть индекс в глобале ^Habr.TestI. Сортировка этого глобала — Cyrillic3, значит и порядок строк должен быть алфавитный:



Опять не то. Смотрим план:





Чтобы вывести фамилии в исходном виде (до преобразования SQLUPPER, которое по умолчанию применяется к элементам индекса SurInd) данных только индекса мало и нужно обращаться к таблице, поэтому оптимизатор SQL решил брать данные сразу из таблицы и сортировать их во временной переменной — так же как и в случае с name.



Если указать в запросе, что верхний регистр нас устраивает, то порядок будет верный — ведь данные будут браться напрямую из индексного глобала ^Habr.testI:





План запроса ожидаемый:





Теперь давайте сделаем, что давно нужно было сделать — изменим сортировку по умолчанию для новых глобалов в базе CACHETEMP на Cyrillic3 (или на Cyrillic4).



Запросы, использовавшие временные структуры, теперь выводят строки в правильном порядке:









Выводы




  • Если вас не волнует, в каком порядке отображаются данные с буквой Ё, — используйте таблицу сортировок Cach'e standard.

  • Если вы используете Cyrillic3, протестируйте своё приложение с таблицей сортировки Cyrillic4. Приложение может стать быстрее.

  • Проверьте, что в базе данных CACHETEMP, рабочей базе данных и в настройках локали стоит одна и та же таблица сортировки.





Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/280081/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<сортировка - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda