powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вложенный запросы -- in ('слово1', 'слово2', 'слово3', 'слово4' ...)
4 сообщений из 4, страница 1 из 1
Вложенный запросы -- in ('слово1', 'слово2', 'слово3', 'слово4' ...)
    #32062081
Максим (m-axic)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте !
Вопрос следующий. Как ускорить выполнение запроса

select count(*)... from table where word in (список слов в кавычках) group by ...

word - varchar(50).

по другому сделать не представляется возможным. :(
Время отработки запроса прямо пропорционально кол-ву слов в (..). При 300 слов около 15 сек. В Таблице около 500.000 записей. по всем полям есть индексы.. Может быть plan поможет - только как им пользоваться и редактировать в IB Expert я не понял.
Если varchar(30) сделать быстрее будет ?

Спасибо...
...
Рейтинг: 0 / 0
Вложенный запросы -- in ('слово1', 'слово2', 'слово3', 'слово4' ...)
    #32062129
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. На forums.demo.ru есть мощная конференция epsylon.public.interbase - спроси там.
...
Рейтинг: 0 / 0
Вложенный запросы -- in ('слово1', 'слово2', 'слово3', 'слово4' ...)
    #32062170
Привет!
Список слов помести в таблицу - как бы временную, и выполняй, только не через In, а используя EXISTS.

То есть, для хранения временных слов создай таблицу вида:

Код: plaintext
1.
2.
3.
Create table tmpword(
userid INTEGER,
theword varchar( 50 )
)


Индексы, конечно создать надо.
Заноси в эту таблицу слова, а также ID пользователя - чтобы обеспечить многопользовательскую работу.

Далее так
Код: plaintext
1.
2.
3.
4.
5.
6.
Select count(*)
FROM table t1
WHERE exists(
select * from
tmpword tw 
where tw.theword =t1.word
and tw.userid=?Your_USERID)


Такая конструкция разворачивается оптимизатором в join (IN - в набор OR) и работает очень быстро.

После использования - удалить слова.

В сущности, можно все это офрмить в приятную на ощупь хранимую процедурку :)

WBR,
Alexey Kovyazin,
www.interbase-world.com
...
Рейтинг: 0 / 0
Вложенный запросы -- in ('слово1', 'слово2', 'слово3', 'слово4' ...)
    #32125165
George_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно для явного задания в запросе строк в конструкции IN оптимизации запроса не произойдет, если же работать с запросом типа
select * from table_name where any_table in (select name from other_table)
тогда при условиии что на other_table.name стоят индексы запрос полетит.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вложенный запросы -- in ('слово1', 'слово2', 'слово3', 'слово4' ...)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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