Доброго дня всем!
По одному из видов документов, есть необходимость поиска
документа по неполному номеру.
Сейчас реализовано так:
SELECT
Жур.IDDoc as [Договор $Документ.Договор]
FROM
_1SJourn as Жур WITH (NOLOCK)
WHERE
Жур.IDDocDef = 4375 -- тут вид документа
AND PATINDEX ('%тут номер для поиска%' , Жур.DocNo) > 0
База растет, и все это дело уже не устраивает по скорости
(сейчас, в зависимости от загрузки сервера, время колеблется от 10 секунд и выше ).
Попробовал ограничить выборку за период
AND Жур.Date_Time_IDDoc BETWEEN 'датаначала' AND 'датаконцаZ'
минимальный период в котором надо искать от текущей даты минус три года, выигрыша по скорости нет.
Еще один вариант, который пришел в голову:
- сделал рядом еще одну базу с одной таблицей (поля IDDoc и DocNo)
- заполнил таблицу, тем что было на момент создания базы
- настроил джоб добавлять недостающие записи в таблицу
В итоге запрос для поиска получился вида:
SELECT
Жур.IDDoc as [Договор $Документ.Договор]
FROM
_1SJourn as Жур WITH (NOLOCK)
WHERE
Жур.IDDOC IN (SELECT IDDOC FROM testDogNumber.dbo.dogNumbers WHERE PATINDEX ('%тут номер для поиска%', DocNo) > 0)
проверил не тестовой базе, скорость вроде стала получше (до 5 секунд).
Но что-то терзают смутные сомнения, туда ли я иду...
Вопрос в чем, может кто подскажет были ли у кого еще такие проблемы, и посоветуете как лучше решить?
MSSQL 2008 r2
SELECT
COUNT(*)
FROM
_1SJourn as Жур WITH (NOLOCK)
возвращает 15533420 записей...
Заранее спасибо тем кто откликнется!