Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос обрабатывается дольше минуты  [new]
Mudrec
Member

Откуда:
Сообщений: 90
Не могу понять, в чем глюк.

---запрос обрабатываетя за секунду и содержит порядка 60тыс строк если указан город и район.
---запрос обрабатываетя за 2 секунды и содержит порядка 37тыс строк если указан город и район и геоним.
---запрос обрабатываетя за 2 секунды и содержит порядка 2,8тыс строк если указан город и район и геоним и название улицы.
---запрос обрабатываетя за 2 секунды и содержит порядка 3 строк если указан город и район и геоним и название улицы, номер дома и номер квартиры.

select surname
from tbFIO
left join tbAdres on tbAdres.id=tbFIO.idAdres
left join tbRayonGorod on tbRayonGorod.id=tbAdres.idGorodRayon
left join tbStreet on tbStreet.ID=tbAdres.idStreet)
left join tbNomerDoma on tbNomerDoma.ID=tbAdres.idNomerDoma
left join tbNomerKvartira kv on kv.ID=tbAdres.idNomerKvartira
where gorod_adr ='г.Хороший' and rayon_adr ='Хорошинский р-н' and geonim_adr='ул.' and
street_adr='Магистральная' and NomerDoma='27' and NomerKvartira='5'

НО запрос работает полторы минуты, если указан город, район, геоним, название улицы и НОМЕР ДОМА

В чем причина?
6 ноя 15, 00:08    [18376042]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Mudrec,

В планах выполнения запросов.
6 ноя 15, 00:18    [18376062]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
Mudrec
Member

Откуда:
Сообщений: 90
Mind,

подскажите что это значит и как эту проблему можно решить
6 ноя 15, 00:21    [18376075]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
dark_DBa_dmin
Member

Откуда:
Сообщений: 105
Mudrec
Mind,

подскажите что это значит и как эту проблему можно решить


Это значит что вам надо в студии зайти в план и посмотреть что там написано, если не знаете что такое план запроса, учите матчасть, так как объяснять дальше оптимизацию запросов смысла нет.
https://msdn.microsoft.com/ru-ru/library/ms190402(v=sql.105).aspx - иструкции по планам выполнения
https://msdn.microsoft.com/ru-ru/library/ms178071(v=sql.105).aspx - https://msdn.microsoft.com/ru-ru/library/ms178071(v=sql.105).aspx
https://msdn.microsoft.com/ru-ru/library/ms175913(v=sql.105).aspx - Значки графических планов выполнения
По поводу проблемы, попробуйте статистику пересчитать (может поможет а может нет).
6 ноя 15, 07:06    [18376332]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Mudrec,

А вы приводите время первого выполнения запросов, или каждый из запросов несколько раз запускали?
6 ноя 15, 10:01    [18376754]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
Bator
Member

Откуда: Порт пяти морей
Сообщений: 439
SQL Server, не смотря на то, что написано left join, может начать выборку с таблицы tbNomerDoma, чтобы понять почему - нужно читать про планы, статистику и прочую ерунду.
быстрое решение - написать LOOP или обернуть в OUTER APPLY.
более долгое решение - выставить нужные индексы, если они есть, то проверить что со статистикой.
З.Ы. если есть возможность - выправить структуру, имхо квартиры и номера домов пихать в справочники весьма странное решение.
  select surname
  from tbFIO
  left join tbAdres on tbAdres.id=tbFIO.idAdres
  left join tbRayonGorod on tbRayonGorod.id=tbAdres.idGorodRayon
  left join tbStreet on tbStreet.ID=tbAdres.idStreet

  left LOOP join tbNomerDoma on tbNomerDoma.ID=tbAdres.idNomerDoma
  -- outer apply(select * from tbNomerDoma where tbNomerDoma.ID=tbAdres.idNomerDoma) as tbNomerDoma
  left join tbNomerKvartira kv on kv.ID=tbAdres.idNomerKvartira
  where gorod_adr ='г.Хороший' and rayon_adr ='Хорошинский р-н' and geonim_adr='ул.' and
  street_adr='Магистральная' and NomerDoma='27' and NomerKvartira='5'
6 ноя 15, 10:09    [18376796]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
Mudrec
Member

Откуда:
Сообщений: 90
Bator
SQL Server, не смотря на то, что написано left join, может начать выборку с таблицы tbNomerDoma, чтобы понять почему - нужно читать про планы, статистику и прочую ерунду.
быстрое решение - написать LOOP или обернуть в OUTER APPLY.
более долгое решение - выставить нужные индексы, если они есть, то проверить что со статистикой.
З.Ы. если есть возможность - выправить структуру, имхо квартиры и номера домов пихать в справочники весьма странное решение.
  select surname
  from tbFIO
  left join tbAdres on tbAdres.id=tbFIO.idAdres
  left join tbRayonGorod on tbRayonGorod.id=tbAdres.idGorodRayon
  left join tbStreet on tbStreet.ID=tbAdres.idStreet

  left LOOP join tbNomerDoma on tbNomerDoma.ID=tbAdres.idNomerDoma
  -- outer apply(select * from tbNomerDoma where tbNomerDoma.ID=tbAdres.idNomerDoma) as tbNomerDoma
  left join tbNomerKvartira kv on kv.ID=tbAdres.idNomerKvartira
  where gorod_adr ='г.Хороший' and rayon_adr ='Хорошинский р-н' and geonim_adr='ул.' and
  street_adr='Магистральная' and NomerDoma='27' and NomerKvartira='5'


Спасибо огромное!!!! Используя left LOOP запрос отработал за 6 сек. Справочник домов и квартир просто необходим для моей задачи.
6 ноя 15, 21:42    [18381344]     Ответить | Цитировать Сообщить модератору
 Re: Запрос обрабатывается дольше минуты  [new]
Mudrec
Member

Откуда:
Сообщений: 90
dark_DBa_dmin
Mudrec
Mind,

подскажите что это значит и как эту проблему можно решить


Это значит что вам надо в студии зайти в план и посмотреть что там написано, если не знаете что такое план запроса, учите матчасть, так как объяснять дальше оптимизацию запросов смысла нет.
https://msdn.microsoft.com/ru-ru/library/ms190402(v=sql.105).aspx - иструкции по планам выполнения
https://msdn.microsoft.com/ru-ru/library/ms178071(v=sql.105).aspx - https://msdn.microsoft.com/ru-ru/library/ms178071(v=sql.105).aspx
https://msdn.microsoft.com/ru-ru/library/ms175913(v=sql.105).aspx - Значки графических планов выполнения
По поводу проблемы, попробуйте статистику пересчитать (может поможет а может нет).


Спасибо, обязательно изучу, потому что матчасть хромает.
6 ноя 15, 22:18    [18381535]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить