powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Срочно! Помогите с запросом!!!
6 сообщений из 6, страница 1 из 1
Срочно! Помогите с запросом!!!
    #32030625
Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

У меня очень острая проблема. Есть таблица s2_words (индекс слов) и s2_index (размещение слов по документам). Как мне организовать пересечение документов (логику "И" между словами поисковой строки)? --ОЧЕНЬ СРОЧНО!!!

Я это сделал примерно так:
select bk_id from s2_words w inner join s2_index i on w.wrd_id = s.wrd_id GROUP BY bk_id HAVING count(*) = @wordscount
В таблице s2_index всего 7,5 млн записей. Выполняется около минуты.

Нельзя ли сделать это другим способом (более быстро)?
...
Рейтинг: 0 / 0
Срочно! Помогите с запросом!!!
    #32030633
Alex P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где здесь поисковая строка? Похоже, этот запрос просто вернет все документы, в которых встречается @wordscount любых слов.
...
Рейтинг: 0 / 0
Срочно! Помогите с запросом!!!
    #32030658
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебя понял так: Есть некий набор слов и необходимо найти документы в которых встречаются ВСЕ указанные слова.

Ну так прямо и пиши:

SELECT i.bk_id FROM s2_index i
WHERE
i.wrd_id IN (SELECT wrd_id FROM s2_words WHERE s2_words.words='СЛОВО1') AND
i.wrd_id IN (SELECT wrd_id FROM s2_words WHERE s2_words.words='СЛОВО2') AND
i.wrd_id IN (SELECT wrd_id FROM s2_words WHERE s2_words.words='СЛОВО3') AND
...

Конечно, это не идеал, но кажется здесь в конфе уже обсуждался вопрос выборки значений, когда надо отобрать записи принимающие ВСЕ заданные значения из набора. Полистай, может найдешь.
...
Рейтинг: 0 / 0
Срочно! Помогите с запросом!!!
    #32030665
Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слова поисковой строки находятся в таблице s2_words. На самом деле это - временная таблица, как вы понимаете. Кроме самих слов в ней находятся соответствующие им идентификаторы, по которым осуществляется связь с индексом
...
Рейтинг: 0 / 0
Срочно! Помогите с запросом!!!
    #32030667
Николай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, Владимир, этот путь хорош, если уже известен набор слов, их количество. Можно также использовать динамический SQL, только по вполне понятным причинам я специально ушел от этой практики.
...
Рейтинг: 0 / 0
Срочно! Помогите с запросом!!!
    #32030736
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не уверен, что это будет лучше (посмотри по планировщику), однако, попробуй такой вариант:

SELECT bk_id FROM s2_index
WHERE wrd_id IN (SELECT wrd_id FROM s2_words)
GROUP BY bk_id HAVING count(*) = @wordscount

Глупо спрашивать, но надеюсь индекс по полю s2_index.wrd_id существует ?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Срочно! Помогите с запросом!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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