У меня происходит что-то странное. Первый запрос, который я получил от запуска профилировщика в приложении C # ADO.NET. То, что он делает, не так интересно, как способ передачи параметров - этот запрос занимает 250+ секунд, но когда я изменяю его (запрос 1), меняя способ передачи параметров (см. Запрос 2) тогда для завершения требуется <0,001 секунды. </p>
Что здесь происходит? Что мы можем сделать, чтобы заставить ADO.NET генерировать более оптимальный запрос?
-----------------------------------------------------------------------
-- Query 1
-----------------------------------------------------------------------
exec sp_executesql N'
SELECT
*
FROM
BSM.Instruments
WHERE
DataBlockId=@0 AND
InstrumentId IN (
SELECT
DISTINCT InstrumentId
FROM
BSM.InstrumentPositions
WHERE
DataBlockId=@0 AND
PortfolioId IN (
SELECT
DISTINCT PortfolioId
FROM
BSM.PortfolioLeaves(@1,@2)
)
)'
,N'@0 uniqueidentifier,@1 uniqueidentifier,@2 uniqueidentifier'
,@0='B1C69A98-50D3-11DE-A173-00155DE1F500'
,@1='ABADF5F7-50D3-11DE-A173-00155DE1F500'
,@2='ABADFF41-50D3-11DE-A173-00155DE1F500'
-----------------------------------------------------------------------
-- Query 2
-----------------------------------------------------------------------
declare @0 uniqueidentifier = 'B1C69A98-50D3-11DE-A173-00155DE1F500'
declare @1 uniqueidentifier = 'ABADF5F7-50D3-11DE-A173-00155DE1F500'
declare @2 uniqueidentifier = 'ABADFF41-50D3-11DE-A173-00155DE1F500'
exec sp_executesql N'
SELECT
*
FROM
BSM.Instruments
WHERE
DataBlockId=@0 AND
InstrumentId IN (
SELECT
DISTINCT InstrumentId
FROM
BSM.InstrumentPositions
WHERE
DataBlockId=@0 AND
PortfolioId IN (
SELECT
DISTINCT PortfolioId
FROM
BSM.PortfolioLeaves(@1,@2)
)
)
'
,N'@0 uniqueidentifier,@1 uniqueidentifier,@2 uniqueidentifier'
,@0
,@1
,@2