Оптимизация поискового запроса

1. Xellsing 33 06.06.17 10:08 Сейчас в теме
Привет всем есть УТ 10.3 нужно было переделать стандартны поиск номенклатуры чтоб искал в наименовании, в добавленном справочнике кроссов, брендах, артикулах, причем по всякому по нескольким словам (к примеру: болт амор подвес Камаз) должен найти все болты амортизатора подвески для Камаза) + если ищут артикул искал и по точному совпадению и очищал строку поиска от посторонних символов (-/*,.) и искал по подобию, но не суть все работает только медленно дольше всего отрабатывает вот этот запрос секунд 15-20 не пойму что с ним не так
Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	СправочникНоменклатура.Ссылка КАК Номенклатура,
	|	СправочникНоменклатура.Артикул,
	|	СправочникНоменклатура.Родитель,
	|	СправочникНоменклатура.Код
	|ИЗ
	|	Справочник.СайтКроссыТоваров КАК СайтКроссыТоваров
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
	|		ПО СайтКроссыТоваров.Артикул = СправочникНоменклатура.ПолеПоиска
	|			И СайтКроссыТоваров.Бренд = СправочникНоменклатура.Бренд
	|ГДЕ
	|	СайтКроссыТоваров.КроссПоисковыйАртикул ПОДОБНО &Представление
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	НоменклатураСправочник.Ссылка,
	|	НоменклатураСправочник.Артикул,
	|	НоменклатураСправочник.Родитель,
	|	НоменклатураСправочник.Код
	|ИЗ
	|	Справочник.СайтКроссыТоваров КАК СайтКроссыТоваров
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменклатураСправочник
	|		ПО СайтКроссыТоваров.Артикул = НоменклатураСправочник.ПолеПоиска
	|			И СайтКроссыТоваров.Бренд = НоменклатураСправочник.Бренд
	|ГДЕ
	|	СайтКроссыТоваров.КроссПоисковыйАртикул = &Крос";
	Запрос.УстановитьПараметр("Представление", Т);
	Запрос.УстановитьПараметр("Крос", Строка);
	ТЗ = Запрос.Выполнить().Выгрузить();
Показать


Подскажите что можно с ним сделать чтоб работал быстро ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Dzamba 06.06.17 10:40 Сейчас в теме
(1) Попробуйте такой запрос.

ВЫБРАТЬ 
	СайтКроссыТоваров.Артикул, 
	СайтКроссыТоваров.Бренд
ПОМЕСТИТЬ втСайтКроссыТоваров 
ИЗ 
	Справочник.СайтКроссыТоваров КАК СайтКроссыТоваров
ГДЕ 
	СайтКроссыТоваров.КроссПоисковыйАртикул ПОДОБНО &Представление 
 
ОБЪЕДИНИТЬ ВСЕ 
 
ВЫБРАТЬ 
	СайтКроссыТоваров.Артикул, 
	СайтКроссыТоваров.Бренд 
ИЗ 
	Справочник.СайтКроссыТоваров КАК СайтКроссыТоваров
ГДЕ 
	СайтКроссыТоваров.КроссПоисковыйАртикул = &Крос
;

ВЫБРАТЬ РАЗЛИЧНЫЕ
	СправочникНоменклатура.Ссылка, 
	СправочникНоменклатура.Артикул, 
	СправочникНоменклатура.Родитель, 
	СправочникНоменклатура.Код
ИЗ
	втСайтКроссыТоваров КАК втСайтКроссыТоваров
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура 
		ПО (втСайтКроссыТоваров.Артикул = СправочникНоменклатура.ПолеПоиска 
			И втСайтКроссыТоваров.Бренд = СправочникНоменклатура.Бренд)	
Показать
6. Xellsing 33 06.06.17 11:03 Сейчас в теме
(3) Михаил спасибо быстрей обрабатывает не намного, но быстрей, сейчас я на файловом варианте на SQL думаю разница будет больше
7. kuzev 47 06.06.17 11:31 Сейчас в теме
(1) Имеет смысл попробовать добавить индекс по Артикул и Бренд при помещении в втСайтКроссыТоваров. Если Бренд имеет ссылочный тип, то поменять местами поля Артикул и Бренд.
9. Xellsing 33 06.06.17 12:38 Сейчас в теме
(7) Евгений можете пояснить что значит добавить индекс у этих реквизитов стоит свойство индексировать, или есть еще какая та функция
10. Dream_kz 129 06.06.17 12:50 Сейчас в теме
(9) Я думаю он имел ввиду что-то подобное:

ВЫБРАТЬ 
    СайтКроссыТоваров.Артикул, 
    СайтКроссыТоваров.Бренд
ПОМЕСТИТЬ втСайтКроссыТоваров 
ИЗ 
    Справочник.СайтКроссыТоваров КАК СайтКроссыТоваров
ГДЕ 
    СайтКроссыТоваров.КроссПоисковыйАртикул ПОДОБНО &Представление 
Индексировать ПО Артикул, Бренд
Показать


Вкладка Индекс, в конструкторе
8. kuzev 47 06.06.17 11:35 Сейчас в теме
(1) вместо ОБЪЕДИНИТЬ ВСЕ можно изменить условие в ГДЕ:
ВЫБРАТЬ 
    СайтКроссыТоваров.Бренд,
    СайтКроссыТоваров.Артикул
ПОМЕСТИТЬ втСайтКроссыТоваров 
ИЗ 
    Справочник.СайтКроссыТоваров КАК СайтКроссыТоваров
ГДЕ 
    СайтКроссыТоваров.КроссПоисковыйАртикул = &Крос
    ИЛИ СайтКроссыТоваров.КроссПоисковыйАртикул ПОДОБНО &Представление
ИНДЕКСИРОВАТЬ ПО
    СайтКроссыТоваров.Бренд,
    СайтКроссыТоваров.Артикул
Показать
11. Dzamba 06.06.17 13:06 Сейчас в теме
(8) не рекомендуется использовать логическое ИЛИ в условии ГДЕ
2. Xellsing 33 06.06.17 10:39 Сейчас в теме
И еще таких 2 подобных запроса отдельно для Наименований и отдельно для Артикулов потом я объединяю ТЗ или лучше это все в 1 запрос объединить?
4. BackinSoda 06.06.17 10:51 Сейчас в теме
Может выгрузить одну часть запроса без условий, проиндексировать по номенклатуре ТЗ, а дальше с НайтиСтроки уже работать ?
5. Xellsing 33 06.06.17 11:00 Сейчас в теме
(4)Не совсем понял, то есть выбрать запросом все без условий, а как я потом ТЗ по подобию обработаю искать по вхождению в строку, по моему так будет медленней если весь справочник в цикле перебирать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот