sql-server - 划分为分区的 SQL 表上的执行计划问题
问题描述
从我在 SQL 中创建的表中选择记录时遇到问题,该表分为多个分区。
虽然,我使用带有“TOP”的 SQL 查询,但分区行为正确。例子:
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
谁能解释我为什么,当我使用包含“TOP”短语分区的 SQL 查询时,我只得到正确分区的元素并且没有“TOP”作为 SQL 查询执行计划的一部分正在搜索所有分区?
解决方案
推荐阅读
- google-analytics - 将增强的电子商务指标添加到查询中
- html - 如何将左侧的按钮与中心的链接对齐以形成可折叠的导航栏?
- r - 将存在-不存在矩阵转换为R中每行的单个变量
- google-maps - 我可以在带有选项滚轮的谷歌地图中使用滚动元素:真的吗?
- postgresql - 如何用包含相同选择语句的文件名替换 (select current_timestamp)?
- r - cronR cronjob 在 ubuntu/本地系统上工作,但不在 shinyapp.io 中
- c# - 如何修复“当前上下文中不存在名称‘k’”错误?
- visual-studio - 调试 ASP .Net Core 符号和源不匹配
- tcp - UDP和TCP ping有标准方法吗?
- c# - 如何模拟 AppDomain.CurrentDomain.BaseDirectory