Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 9. LIKE .... / 10 сообщений из 10, страница 1 из 1
13.09.2005, 17:20
    #33267095
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Всем привет!

Есть таблица, содержащая порядка 1 000 000 строк. Нужно часто выполнять запрос вида:
Код: plaintext
1.
select top N start at M * from where text_field like 'some pattern'.

Таблица содержит десяток полей типа int и пару строковых, по которым и делается LIKE.

Что сделать чтобы ускорить выполнения запроса?
...
Рейтинг: 0 / 0
13.09.2005, 17:31
    #33267129
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Забыл сказать, что этому полю еще и сортировать нужно... т.е.
Код: plaintext
1.
select top N start at M * from where text_field like 'some pattern' order by text_field.
...
Рейтинг: 0 / 0
13.09.2005, 17:50
    #33267176
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Серж пишет:

> select top N start at M * from where text_field like 'some pattern'.
....
> Что сделать чтобы ускорить выполнения запроса?

Если этот some pattern затрагивает начало строки, т.е. имеет например
вид 'что-то%', то просто индекс по полю поможет. Если что-то типа
'%что-то%', то тогда задумайся над механизмами полнотекстового поиска.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13.09.2005, 18:01
    #33267203
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Нет, шаблон может самый разный, не только по началу строки.

Над полнотекстовым поиском задумывался... Это было бы хорошо, но в АСА нет его. Надо надстраивать что-то сверху.

Но я бы пока обошелся шаблонами и LIKE. Я пробовал создать такую же таблицу на mysql - на нем выполняется заметно быстрее. Вот я и задумался "В чем причина?".

В mysql я использовал тип char, он фиксирвоанной длины, и следовательно размер записи получается тоже фиксированный. Там и особый какой-то типа таблицы создается. Пока причину шустрости mysql вижу в этом.

В АСА, на сколько я понял из хелпа, char имеет переменную длину...
...
Рейтинг: 0 / 0
13.09.2005, 18:25
    #33267281
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Серж пишет:

> таблицу на mysql - на нем выполняется заметно быстрее. Вот я и задумался
> "В чем причина?".

MySQL заточен под быстрое выполнение примитивных запросов. Если это
сделать на plain-text файлах некривыми руками, то получится еще гораздо
быстрее. Вас это не удивит?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14.09.2005, 06:18
    #33267683
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Нет, не удивит. Но текстовые файлы меня не интересуют.
...
Рейтинг: 0 / 0
14.09.2005, 10:07
    #33267953
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
СержНет, шаблон может самый разный, не только по началу строки.

Над полнотекстовым поиском задумывался... Это было бы хорошо, но в АСА нет его. Надо надстраивать что-то сверху.

Сделайте таблицу типа MyTableTextFieldTails, содержащую поля
КлючОсновнойТаблицы
НомерПозиции
Остаток

В поле остаток нужно положить substring(text_field, НомерПозиции,length(text_field )), т.е. таблица должна содержать text_field, text_field со второго символа, text_field с третьего символа, с четвертого символа и т.д. до последнего.
Поле Остаток проиндексируйте. Таблицу MyTableTextFieldTails поддерживайте триггерами или хранимыми процедурами.
Ваш запрос
Код: plaintext
1.
select top N start at M * from MyTable where text_field like '%some pattern%'.
превратиться
Код: plaintext
1.
2.
3.
4.
select distinct top N start at M * 
from MyTableTextFieldTails tail
join MyTable t on t.pk= tail.pk
where tail.Остаток like 'some pattern%'.

Или аналогичный запрос с подзапросом по MyTableTextFieldTails.
Этот запрос гораздо более работоспособен.
...
Рейтинг: 0 / 0
14.09.2005, 11:36
    #33268323
Серж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
MasterZiv
Сделайте таблицу типа MyTableTextFieldTails, содержащую поля


Хм... интересно. Спасибо, попробую.
...
Рейтинг: 0 / 0
14.09.2005, 11:42
    #33268350
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Серж пишет:

> Хм... интересно. Спасибо, попробую.

Так это и есть один из вариантов примитивного механизма полнотекстового
поиска. Только рекомендую для начала подсчитать размеры таблиц. Для
миллиона исходных записей при средней длине текстового поля 100 символов
в этой таблице будет 100 миллионов записей.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14.09.2005, 12:42
    #33268635
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASA 9. LIKE ....
Тогда нужно наоборот. Делаем таблицу с одной строкой и полем long varchar. Заряжаем туда текстовую строку из 1 записи+текстовую строку из 2-ой записи и т.д. из оригинальной таблицы.
Поиск функцией locate. По возвращенной позиции подстроки можно рассчитать номер строки в оригинальной таблице. попробовать надо, насколько быстро будет работать.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 9. LIKE .... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]