Максимальное количество пунктов where в хранимой процедуре - PullRequest
1 голос
/ 21 января 2010

У меня и моих коллег есть вопрос относительно длины запросов SQL Server 2008 и оптимизатора SQL Server.

Мы планируем создать некоторые хранимые процедуры, которые потенциально могут иметь много параметров. Внутри нашей хранимой процедуры мы просто выберем некоторые значения из таблицы, соединяющей другие таблицы.

Наши хранимые процедуры будут выглядеть так

CREATE PROCEDURE QueryTable
@Parameter001 nvarchar(20),
@Parameter002 int,
@Parameter003 datetime,
@Parameter004 decimal(11,2),
@Parameter005 date,
@Parameter006 varchar(150),
@Parameter007 int,
@Parameter008 decimal(5,2),
@Parameter009 nvarchar(10),
@Parameter010 nvarchar(200),
@Parameter011 nvarchar(50) --,
--...and so on, there are probably 50 to 100 parameters here

AS
BEGIN
SET NOCOUNT ON;

SELECT ID, COL01, COL02, COL03, COL04, COL05 from TestTable T
LEFT JOIN AnotherTable A On T.SomeColomn = A.SomeColumn
LEFT JOIN AThirdTable ATT On A.ThirdTableID = ATT.Id
--and so on, probably 5-10 Tables joined here
WHERE 
      T.Col02 = @Parameter001 AND
      T.Col05 = @Parameter004 AND
      ATT.SomeColumnContainingData = @Parameter027
      A.AnotherID = @Parameter050
      --probably 50 to 100 conditions here (Number of conditions equals number of parameters)
END
GO

Наши вопросы: Существует ли ограничение на количество условий, которые оптимизатор запросов и кэш SQL Server могут принимать во внимание? Если такого технического ограничения нет, существует ли передовая практика относительно того, сколько условий можно и нужно использовать в таких случаях?

Ответы [ 3 ]

1 голос
/ 21 января 2010

Ограничение количества предложений WHERE не будет вашей проблемой.

Кэширование параметров и плохие (или неверные) планы запросов могут быть в кэше.

Этого можно избежать, используя OPTIMIZE FOR

Очевидно, что чем менее сложным вы можете сделать предложение WHERE, тем лучше.

0 голосов
/ 21 ноября 2010

На случай, если кому-то интересно ...

Мы решили эту проблему, создав динамический sql, который выполняется на сервере. Таким образом, применимо только в тех случаях, когда используются предложения, а утверждение относительно короткое.

0 голосов
/ 21 января 2010

В электронной документации по SQL Server есть список ограничений реализации, включая аспекты запросов. Это список SQL Server 2005.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...