У меня проблема с выбором записей из таблицы, которую я создал в SQL, которая разделена на разделы.
Хотя я использую запрос SQL с "TOP", разделы ведут себя правильно. Пример:
SELECT TOP (1000) name, partitionNumber
FROM MyTable
WHERE partitionNumber = 2
Экран из ПРАВИЛЬНО план выполнения:
правильно
, но при создании запроса без "TOP", разделы, кажется, не работают, как они должны. Пример:
SELECT name, partitionNumber
FROM MyTable
WHERE partitionNumber = 2
Экран из НЕПРАВИЛЬНЫЙ план выполнения:
неверно
Я создал таблицу, а затем создал раздел как это:
CREATE TABLE [dbo].[TestPartitions](
[x] [int] NOT NULL,
[y] [nvarchar](255) NULL
PRIMARY KEY (x)
)
CREATE PARTITION FUNCTION udf_partitionByName([nvarchar](255))
AS RANGE RIGHT
FOR VALUES(
'P1'
,'P2'
,'P3'
,'P4');
GO
CREATE PARTITION SCHEME ups_partionByName
AS PARTITION udf_partitionByName
ALL TO ([PRIMARY])
GO
CREATE NONCLUSTERED INDEX IX_Partition_Name ON [TestPartitions] (y)
ON ups_partionByName(y)
DECLARE @Counter INT
DECLARE @Part NVARCHAR(255)
SET @Part = 'P1'
SET @Counter=0
WHILE ( @Counter <= 400)
BEGIN
SET @Counter = @Counter + 1;
IF (@Counter > 100)
SET @Part = 'P2'
IF (@Counter > 200)
SET @Part = 'P3'
IF (@Counter > 300)
SET @Part = 'P4'
INSERT INTO TestPartitions
(x, y)
VALUES
(@Counter, @Part)
END
Может кто-нибудь объяснить мне почему , когда я использую запрос SQL с содержащей фразу "TOP" работает разделение, и я получаю только элементы правильный раздел и без "TOP", как часть SQL план выполнения запроса выполняет поиск по всем разделам?