Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
senglory Member Откуда: Сообщений: 97 |
Вот мой сиквел:
Вот вьюха: ALTER VIEW [dbo].[A] AS SELECT (ACCOUNTNUM + '1' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, VENDGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, OKPO_RU AS ОКПО, OKDP_RU AS ОКПД, LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 1 AS 'Тип контрагента' FROM [sql-ax2k9-db].nidan_real_2k9.dbo.VENDTABLE UNION ALL SELECT (ACCOUNTNUM + '0' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, CUSTGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, CODEOKPO_RU AS ОКПО, CODEOKDP_RU AS ОКПД, LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 0 AS 'Тип контрагента' FROM [sql-ax2k9-db].nidan_real_2k9.dbo.CUSTTABLE UNION ALL (SELECT (EMPLID + '' + LTRIM(RTRIM(EmplTable.DATAAREAID))) AS [Код], DirPartyTable.NAME AS Название, EmplGroupId_RU AS [Группа], EMPLID AS [Код AXAPTA], 'Нет' AS Блокировано, '' AS ИНН, '' AS КПП, '' AS ОКПО, '' AS ОКПД, LTRIM(RTRIM(EmplTable.DATAAREAID)) AS 'Компания', 2 AS 'Тип контрагента' FROM [sql-ax2k9-db].nidan_real_2k9.dbo.EmplTable INNER JOIN [sql-ax2k9-db].nidan_real_2k9.dbo.DirPartyTable ON (EmplTable.partyID = DirPartyTable.PartyID) AND (EmplTable.dataareaid = DirPartyTable.dataareaid) WHERE (EMPLTABLE.AdvHolder_RU = 1) AND (EMPLTABLE.Status <> 2)) [b]UNION ALL SELECT '0' AS [Код], '(нет данных)' AS Название, '' AS [Группа], 'EMPTY' AS [Код AXAPTA], 'Да' AS Блокировано, '' AS ИНН, '' AS КПП, '' AS ОКПО, '' AS ОКПД, '' AS 'Компания', 0 AS 'Тип контрагента'[/b] Вот запрос: exec sp_executesql N'SELECT TOP (100) [t0].[Код], [t0].[Название], [t0].[Группа], [t0].[Код AXAPTA] AS [Код_AXAPTA], [t0].[Блокировано], [t0].[ИНН], [t0].[КПП], [t0].[ОКПО], [t0].[ОКПД], [t0].[Компания], [t0].[Тип контрагента] AS [Тип_контрагента] FROM [dbo].[A] AS [t0] WHERE ([t0].[Название] LIKE @p0) AND ([t0].[Тип контрагента] = @p1) AND ([t0].[Компания] = @p2)',N'@p0 nvarchar(9),@p1 int,@p2 nvarchar(2)', @p0=N'%maneesh%',@p1=2,@p2=N'НС' Выполняется секунд 30 минимум и ничего не возвращает. Если закомментить выделенные в определении вьюхи строки, то выполнится влет. Почему и как исправить вьюху? |
||
14 сен 12, 17:03 [13166401] Ответить | Цитировать Сообщить модератору |
senglory Member Откуда: Сообщений: 97 |
Т.е. для такой вьюхи:ALTER VIEW [dbo].[A] AS SELECT (ACCOUNTNUM + '1' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, VENDGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, OKPO_RU AS ОКПО, OKDP_RU AS ОКПД, LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 1 AS 'Тип контрагента' FROM [sql-ax2k9-db].nidan_real_2k9.dbo.VENDTABLE UNION ALL SELECT (ACCOUNTNUM + '0' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, CUSTGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, CODEOKPO_RU AS ОКПО, CODEOKDP_RU AS ОКПД, LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 0 AS 'Тип контрагента' FROM [sql-ax2k9-db].nidan_real_2k9.dbo.CUSTTABLE UNION ALL (SELECT (EMPLID + '' + LTRIM(RTRIM(EmplTable.DATAAREAID))) AS [Код], DirPartyTable.NAME AS Название, EmplGroupId_RU AS [Группа], EMPLID AS [Код AXAPTA], 'Нет' AS Блокировано, '' AS ИНН, '' AS КПП, '' AS ОКПО, '' AS ОКПД, LTRIM(RTRIM(EmplTable.DATAAREAID)) AS 'Компания', 2 AS 'Тип контрагента' FROM [sql-ax2k9-db].nidan_real_2k9.dbo.EmplTable INNER JOIN [sql-ax2k9-db].nidan_real_2k9.dbo.DirPartyTable ON (EmplTable.partyID = DirPartyTable.PartyID) AND (EmplTable.dataareaid = DirPartyTable.dataareaid) WHERE (EMPLTABLE.AdvHolder_RU = 1) AND (EMPLTABLE.Status <> 2)) все выполняется быстро |
14 сен 12, 17:04 [13166409] Ответить | Цитировать Сообщить модератору |
chatm Member Откуда: Москва Сообщений: 480 |
senglory, в качестве офф по вопросу. а что, Нидан до сих пор на косяпте? вроде бы проходила инфа, что перешли на R/3 а по сути, неплохо бы и планы выполнения приложить |
14 сен 12, 17:29 [13166624] Ответить | Цитировать Сообщить модератору |
Мистер Хенки Member Откуда: канализация Сообщений: 6615 |
имхо неявное преобразование данных |
14 сен 12, 17:32 [13166638] Ответить | Цитировать Сообщить модератору |
user89 Member Откуда: Сообщений: 2083 |
senglory,exec sp_executesql N'SELECT TOP (100) [t0].[Код], ...order by отсутствует... |
14 сен 12, 17:36 [13166678] Ответить | Цитировать Сообщить модератору |
Alexander Titkin Member Откуда: Москва Сообщений: 91 |
senglory, А если попробовать перенести выделенную часть в начало запроса? |
14 сен 12, 18:56 [13167137] Ответить | Цитировать Сообщить модератору |
senglory Member Откуда: Сообщений: 97 |
user89, Пофиг на ORDER BY и его присутствие/отсутствие. Влияет, похоже, последний UNION. |
14 сен 12, 23:36 [13168086] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31780 |
|
||
15 сен 12, 00:27 [13168233] Ответить | Цитировать Сообщить модератору |
senglory Member Откуда: Сообщений: 97 |
alexeyvg, В общем, анализ плана показал, что больше всего времени тратится на FROM [sql-ax2k9-db].nidan_real_2k9.dbo.XXXXXXXXX т.е. вызов удаленного сервера |
17 сен 12, 22:51 [13179357] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В каком из запросов ? |
||
18 сен 12, 09:12 [13180067] Ответить | Цитировать Сообщить модератору |
senglory Member Откуда: Сообщений: 97 |
Glory, В последнем. Еще возможный фикс - это если вызов делать так: exec sp_executesql N'SELECT TOP (100) [t0].[Код], [t0].[Название], [t0].[Группа], [t0].[Код AXAPTA] AS [Код_AXAPTA], [t0].[Блокировано], [t0].[ИНН], [t0].[КПП], [t0].[ОКПО], [t0].[ОКПД], [t0].[Компания], [t0].[Тип контрагента] AS [Тип_контрагента] FROM [DAXView].[dbo].[SP_CustVendTable] AS [t0] WHERE ([t0].[Название] LIKE @p0) AND ([t0].[Тип контрагента] = @p1) AND ([t0].[Компания] = @p2) option(recompile)',N'@p0 nvarchar(10),@p1 int,@p2 nvarchar(2)',@p0=N'%степанов%',@p1=2,@p2=N'НС' С option(recompile) выполняется за секунду. |
18 сен 12, 15:39 [13183330] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это - https://www.sql.ru/forum/actualthread.aspx?tid=970114 - тоже вы ? Вы планы то _сравнили_ ? Они одинаковые или разные ? |
18 сен 12, 15:41 [13183354] Ответить | Цитировать Сообщить модератору |
NIIIK Member Откуда: Россия, Ростовская область, г. Таганрог Сообщений: 1295 |
Проверте сначала OPTION (OPTIMIZE FOR UNKNOWN) или переобъявить параметры внутри |
18 сен 12, 17:48 [13184247] Ответить | Цитировать Сообщить модератору |
senglory Member Откуда: Сообщений: 97 |
Glory, Нет не я, чес-слово :) Планы отличаются. В аттаче лежат скрины с планами для обоих случаев. К сообщению приложен файл (sql plans.zip - 31Kb) cкачать ![]() |
18 сен 12, 18:26 [13184458] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |