чем заменить конструкцию подобно, ускорить запрос. #669910


#0 by zladenuw
есть такой запрос  "ВЫБРАТЬ |    Авто.Ссылка, если заменить подобно на равно, запрос выполняется за секунды 2. если подобно, очень при очень долго. как ускорить ?
#1 by andreymongol82
"если заменить подобно на равно, запрос выполняется за секунды 2"
#2 by zak555
зачем тебе произведение таблиц СервисныеАкции и СписокФирм ?
#3 by SanGvin
Фигасе какое извращенное соединение таблиц!!!!
#4 by zladenuw
там опятка. там список Авто :). которые есть в базе. и есть сервисные акции. где много разных авто. и при заезде авто нужно проверить или есть на него сервисная акция. по этому вин код храним строкой. если есть такой автомобиль то ссылка на авто
#5 by zladenuw
а как правильно ?
#6 by AaNnDdRrEeYy
зачем тут вообще подобно? СервисныеАкции.Авто (это ссылка) ПОДОБНО СписокФирм.Кузов (и это ссылка) как поведет себя "подобно" если применять его к ссылкам?
#7 by zladenuw
СписокФирм.Кузов - строка кода
#8 by SanGvin
через соединение
#9 by SanGvin
тогда зачем написал "СервисныеАкции.Авто ПОДОБНО СписокФирм.Кузов" ? Поле "Авто" - это ж ссылка
#10 by zladenuw
не Ссылка. в написал же. что если есть такой автомобиль в базе, то там ссылка. если нет то строка.
#11 by AaNnDdRrEeYy
у вин номеров последнии 6 цифр уникальны. от них прыгай. там можно не подобно применять а к подстроке на равно условие сделать
#12 by zladenuw
попробую. хотя вроде нет. в каких то символах заложена модель. может по последнем найти,а вот первый ключ будет отличатся. или делать двойное условие с проверкой на равенство последних. если равно то смотрим весь код или так не взлетит ?
#13 by SanGvin
ну в любом случае условия в соединение пиши, а не в где. И проверь, на сколько быстрее станет. СервисныеАкции.ТвоеПоле1, СписокФирм.ТвоеПоле2 ИЗ            КОГДА СервисныеАкции.Авто ССЫЛКА Справочник.Авто                ТОГДА СервисныеАкции.Авто = СписокФирм.Ссылка            ИНАЧЕ СервисныеАкции.Авто ПОДОБНО СписокФирм.Кузов        КОНЕЦ еще идею из попробуй, тоже ускорить должно процесс.
#14 by GANR
Как угодно избавиться от этого ПОДОБНО - при таком сравнении индексы идут лесом и сканируется вся таблица (table scan), что и является тормозящей операцией в плане запроса.
#15 by zladenuw
да так и сделал. жду вот. крутится запросы еще. все равно долго. только конструкция подобно и можно идти пить что то. в прошлый раз до 6 часов выполнялось. ужас.  может где то ограничение на самом сервере постгреса на объем запроса или это не при чем
#16 by zladenuw
тогда проще в фоне ночью, обрабатывать этот регистр и убивать лишение символы в поле. и использовать конструкцию =
#17 by SanGvin
значит, только через подстроку и условие на равенство
#18 by SanGvin
а не проще "лишние символы" при вводе както контроллировать?
#19 by GANR
+ И еще, что будет если заменить ВЫБОР КОГДА в секции ГДЕ на ОБЪЕДИНИТЬ ВСЕ и 2 запроса с разными условиями соединения? Не побыстрее стало? А может можно как-то методически решить вопрос - подогнать данные таким образом, чтобы эта самая операция = стала применима или вообще перейти на сравнение по Ссылке?
#20 by GANR
А нельзя ли как-то уменьшить размер левой или правой таблицы? Так, хоть и без индексов, но количество сравнений будет меньше.
#21 by zladenuw
разделить выбор. выбрать где есть ссылка и вывести и отдельно где строка и так же вывести. попробую так поигратся
#22 by GANR
В смысле, отфильтровать данные перед операцией соединения.
#23 by zladenuw
так есть фильтр по авто. по определенному бренду. а вот в РС неа
#24 by GANR
Да-да... И еще при сравнении по ПОДОБНО во второй таблице ОБЪЕДИНИТЬ ВСЕ надо-бы перед проверкой этого подобно убедиться, что в проверяемых полях именно строка ТИПЗНАЧЕНИЯ(СервисныеАкции.Авто) = ТИП(Строка), иначе - не проверять.
#25 by GANR
хотя бы урежет количество проверок по ПОДОБНО
#26 by zladenuw
а разве такое условие это не проверяет ВЫБОР    КОГДА СервисныеАкции.Авто ССЫЛКА Справочник.Авто КОНЕЦ
#27 by zladenuw
и самое интересное то что если условие то быстрее 1668, а соединение 1751. хотя ведь соединение должно быть быстрее
#28 by zladenuw
ура. нашел как обмануть. так выполняет 0.94 ВЫБРАТЬ    Авто.Ссылка, ГДЕ    СервисныеАкции.Авто ССЫЛКА Справочник.Авто ОБЪЕДИНИТЬ ВСЕ ГДЕ    НЕ СервисныеАкции.Авто ССЫЛКА Справочник.Авто
#29 by zladenuw
соврал по времени 0.094 :). а вот подобно все равно долго :(.
#30 by zladenuw
такой вопрос. сначала будет выполнена конструкция где или сначала соединение и потом где ?
#31 by zladenuw
можно идти отдыхать. литает запрос. с условием и конструкцией подобно по автомобилям до 1 секунды, без условия 3 секунды.        ГДЕ            СервисныеАкции.Авто ССЫЛКА Справочник.Авто    ГДЕ        СервисныеАкции.Авто ССЫЛКА Справочник.Авто        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокАвто КАК СписокАвто        ПО (СписокАкций.Авто ПОДОБНО СписокАвто.Кузов) Но есть вопрос к знатокам запросов. почему так работает быстрее, если использовать вложенные запросы ?  чем можно увидеть какой запрос уходить на сервер субд ?
#32 by GANR
А попробуй посмотреть на план запроса, предварительно выловив его в MS SQL Profiler и заменив параметры в запросе прямыми указаниями значений. Вообще, имхо, надо попросту перепроектировать структуру данных так, чтобы не было надобности в этих часто использующихся ПОДОБНО - эта операция без какого-то специализированного индекса полнотекстового поиска полюбому приведет к полному сканированию всей таблицы, да еще в цикле, если это соединение.
#35 by GANR
Избегать конструкции ПОДОБНО (LIKE) При работе с отборами удобно выполнять поиск контрагента не по наименованию, а путем установки отбора по условию «Содержит» по полю «Наименование». Однако это отрицательно сказывается на производительности из-за невозможности использования индексов и так приводит к запросам: ВЫБРАТЬ .. ИЗ Справочник.Контрагенты ГДЕ Наименование ПОДОБНО «%СтрокаПоиска%» В таком запросе будет выполнен полный перебор всех записей таблицы. Это отрицательно сказывается на производительности. П р и м е ч а н и е.  В последних версиях MS SQL Server LIKE стал уметь в некоторых случаях использовать поиск, но это все равно не лучший оператор. Так что, возможно MS SQL 2008 - 2013 спасут ситуацию без реструктуризаций данных.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С