Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché Новый топик    Ответить
 Индекс для длинной строки  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 707
Есть строковое свойство длиной около 1000 символов.
Вернее, раньше там были короткие записи, а теперь вот появились и длинные. Так уж вышло.
Но система не может записать индекс для этих записей - SUBSCRIPT, говорит.
Это так и задумано? Как обходите, кто сталкивался?
Длинные строки разрешены.
6 июн 14, 08:51    [16129913]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3066
Блог
Документация
The optional maxlen argument truncates the converted expression string to the specified number of characters when indexing or collating. For example, if you insert a long string with maxlen truncation, the full string is inserted and can be retrieved by a SELECT statement; the index global for this string is truncated to the specified length. This means that ORDER BY and comparison operations only evaluate the truncated index string. Such truncation is especially useful for indexing on strings that exceed the 255-character limit for Caché subscripts. When converting from non-Caché systems, some users encountered problems when they indexed on a VARCHAR(255) field and then tried to insert data into the table. With the maxlen argument, if you need to index on a long field, you can use the truncation length parameter.
источник
Вариант решения
Index idxs On s As SQLUPPER(100);
Property As %VarString;
6 июн 14, 09:23    [16130010]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
rstr
Member

Откуда: Хабаровск
Сообщений: 36
kolesov, если обязательно сохранить полное значение, то может сделать несколько вычисляемых полей?
[s part1=$e(val,1,100)] и т.д. и по ним сделать общий индекс [on part1,part2...]
6 июн 14, 13:10    [16131918]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
Petr0vi4444
Member

Откуда: Владивосток
Сообщений: 137
А много ли пользы индексировать строку длиной 1000 символов? Разбить ее на ключевые слова и индексировать их или iFind попробовать.
6 июн 14, 15:57    [16133590]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3066
Блог
15743518
6 июн 14, 16:21    [16133787]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
Бредятина
Member

Откуда: Москва
Сообщений: 1637
В генераторе отчетов x.magic сортировка делается по неограниченному числу полей. То есть, формально, таким же способом можно сортировать тексты неограниченной длины и, следовательно, строить по ним индексы))... Практическое применение, конечно, не просто найти...
6 июн 14, 21:46    [16135476]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 707
servit
Index idxs On s As SQLUPPER(100);
Property As %VarString;

Честно говоря, и %VarString и SQLUPPER выглядят как хреновый диагноз (пару месяцев протянешь, чувак). Практической ценности нет конечно - есть практическая проблема, когда кроме значений свойства типа "Валенок", "Хрень какая-то" и т.п. стали возникать конструкции, состоящие более чем из символов) Я не виноват(
7 июн 14, 14:32    [16136739]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
Petr0vi4444
Member

Откуда: Владивосток
Сообщений: 137
kolesov,

Можете привести пример sql запроса с условием по индексируемому полю?
8 июн 14, 05:22    [16138217]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 707
Petr0vi4444
kolesov,

Можете привести пример sql запроса с условием по индексируемому полю?

Не понял вопрос. "SELECT ID from Ent where Name [ ?" например. Но у меня не доходит до этого - %Save() не выполняется по SUBSCRIPT.
8 июн 14, 14:15    [16138618]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 756
kolesov, так текущая ситуация какая - ваш вопрос решен ( Index Note On Note As SQLUPPER(255) ) или как обычно?
8 июн 14, 20:00    [16139185]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3066
Блог
kolesov,

Для индексации "неограниченных" строк, а заодно и ускорения поиска, сто́ит попробовать iFind: 15885843 (и далее 15886647, 15887128)
9 июн 14, 10:32    [16140663]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
Petr0vi4444
Member

Откуда: Владивосток
Сообщений: 137
kolesov,

С таким запросом толку от индекса нет. Все равно выполняется полное сканирование таблицы. Толк будет с условиями = или %STARTSWITH.
9 июн 14, 12:59    [16141806]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Индекс для длинной строки  [new]
drakut
Member

Откуда: Москва
Сообщений: 68
kolesov, столкнулись с такой же проблемой. По совету Александра Коблова будем пробовать следующее:

Index idxs On s As SQLUPPER(100) [type=bitmap] НЕЖЕЛАТЕЛЬНО Лучше у поля указывать COLLATION и индексы не трогать
3 фев 17, 14:04    [20177507]     Ответить | Цитировать Сообщить модератору
 Re: Индекс для длинной строки  [new]
Бредятина
Member

Откуда: Москва
Сообщений: 1637
kolesov,
Поскольку в любой СУБД есть сортировка по произвольному (теоретически, бесконечному) числу полей, то, значит есть и сортировка текстов произвольной длины, а не только 1000 символов. Работать это будет быстро, потому что на практике процесс будет заканчиваться, в большинстве случаев, на третьем или пятом "поле".
4 фев 17, 18:16    [20180737]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché Ответить