Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Hopfen_Artur Member Откуда: Сообщений: 106 |
Добрый день, есть два запроса. Запрос 1, время выполнения около 12 мс select coalesce(sum(case when tb.TPA_ior is null then RF.Status else 0 end),0) as status, CON.OID as oid from database3 AS CON left join database4 AS RR ON RR.Asset = CON.OID left join database1 AS RF ON RF.Reader = RR.Oid and RF.Date between dateadd(hour, 7, cast(cast(getdate() as date) as datetime)) and dateadd(hour, 19, cast(cast(getdate() as date) as datetime)) left join database2 as tb on tb.TPA_ior = CON.OID and tb.View_problem = 'простой' and RF.Date between tb.Start_date and isnull(tb.End_date, null) where CON.IP = '1.2.3.4' group by CON.OID; Запрос 2, его собрат в упрощенном виде, где на выходе только один параметр. Время выполнения около 70 мс select coalesce(sum(case when tb.TPA_ior is null then RF.Status else 0 end),0) as status from database1 AS RF left join database4 AS RR ON RF.Reader = RR.Oid AND RF.Date BETWEEN dateadd(hour, 7, cast(cast(getdate() as date) as datetime)) AND dateadd(hour, 19, cast(cast(getdate() as date) as datetime)) left join database2 as tb on tb.TPA_ior = RR.Asset and tb.View_problem = 'простой' and RF.Date between tb.Start_date and isnull(tb.End_date, null) where RR.Asset = 'E3E5F3C0-A20A' Подскажите почему второй запрос в пять раз дольше выполняется, хотя он в разы проще по объему данных (понимаю что миллисекунды) |
27 фев 19, 13:50 [21820520] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Hopfen_Artur, в планы посмотри |
27 фев 19, 13:51 [21820526] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
Hopfen_Artur, ничего себе "собрат в упрощенном виде" в одном есть таблица/вьюха database3 в другом ею даже и не пахнет. |
27 фев 19, 13:56 [21820532] Ответить | Цитировать Сообщить модератору |
Hopfen_Artur Member Откуда: Сообщений: 106 |
felix_ff, ну во втором не нужна database3 потому что передается на прямую ID, да и на выходе один параметр. |
27 фев 19, 14:02 [21820542] Ответить | Цитировать Сообщить модератору |
Hopfen_Artur Member Откуда: Сообщений: 106 |
TaPaK, в одной из таблицы моему пользователю запрещено план смотреть =( |
27 фев 19, 14:05 [21820545] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
не слышал про такие ограничения :) |
||
27 фев 19, 14:07 [21820553] Ответить | Цитировать Сообщить модератору |
Hopfen_Artur Member Откуда: Сообщений: 106 |
TaPaK, Сообщение 262, уровень 14, состояние 4, строка 2 Разрешение SHOWPLAN запрещено в базе данных "database1". Время синтаксического анализа и компиляции SQL Server: время ЦП = 0 мс, истекшее время = 0 мс. Время работы SQL Server: Время ЦП = 0 мс, затраченное время = 0 мс. |
27 фев 19, 14:09 [21820556] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
повезло значит. у меня вот на работе DBA ругались, что планы бы надо смотреть перед запуском, а я им в ответ
троли... SHOWPLAN уровня DATABASE, а значит, в той вьюхе - таблица (TVF?) из другой базы. |
||||||
27 фев 19, 14:13 [21820562] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Hopfen_Artur, это похоже на таблицу? |
27 фев 19, 14:13 [21820563] Ответить | Цитировать Сообщить модератору |
Hopfen_Artur Member Откуда: Сообщений: 106 |
TaPaK, да database1 и database4 это другая база, там у меня доступ только на чтение. Но факт что в первом запросе они тоже присутствуют и запрос там быстрее. Не пойму где что подправить. Вообще запрос 2 это модифицированный вот этот запрос. У него время выполнения около 6 мс, но оно и понятно: select sum(RF.Status) as status from database1 AS RF left join database4 AS RR on RF.Reader = RR.Oid where RR.Asset = 'E3E5F3C0-A20A' AND RF.Date BETWEEN dateadd(hour, 7, cast(cast(getdate() as date) as datetime)) AND dateadd(hour, 19, cast(cast(getdate() as date) as datetime)) |
27 фев 19, 14:20 [21820574] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11568 |
dateadd(hour, 19, cast(cast(getdate() as date) as datetime)) это зачем такие преобразования? database4 - это синоним на объект в другой базе? |
27 фев 19, 14:23 [21820580] Ответить | Цитировать Сообщить модератору |
Hopfen_Artur Member Откуда: Сообщений: 106 |
Konst_One, да, переходная, там связи. Если это заменить то запрос станет 30 мс. select coalesce(sum(case when tb.TPA_ior is null then RF.Status else 0 end),0) as status --заменить на select sum(RF.Status) as status Но блин оно и в первом запросе есть, и вещь нужная. |
27 фев 19, 14:27 [21820593] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11568 |
вы сравниваете абсолютно разные запросы , у них планы отличются, данные другие, индексы скорее всего тоже другие, что вы хотите не понятно |
27 фев 19, 14:30 [21820599] Ответить | Цитировать Сообщить модератору |
Hopfen_Artur Member Откуда: Сообщений: 106 |
Konst_One, я плохо разбираюсь в запросах, спасибо что уделили время, оставлю как есть наверное |
27 фев 19, 14:34 [21820607] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |