使用 Demo from here重现我的问题,更改表结构如下,并将演示分区函数修改为 datetime
CREATE TABLE [dbo].[DemoPartitionedTable](
[DemoID] [int] IDENTITY(1,1) NOT NULL,
[SomeData] [sysname] NOT NULL,
[CaptureDate] [datetime] NULL,
CONSTRAINT [PK_DemoPartitionedTable] UNIQUE NONCLUSTERED
(
[DemoID] ASC,
[CaptureDate] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
Run Code Online (Sandbox Code Playgroud)
用户运行如下查询(查询 1)
SELECT [DemoID], [SomeData], [CaptureDate] FROM
[dbo].[DemoPartitionedTable] WHERE (1=1) and (1=1) and
CONVERT(varchar(10),CaptureDate,112) between 20190912 and 20190912
Run Code Online (Sandbox Code Playgroud)
计划是https://www.brentozar.com/pastetheplan/?id=r1veZhovH
大约需要 4 小时才能返回 500 万行
如果我使用如下分区键来改进上面的代码(查询 2)
SELECT [DemoID], [SomeData], [CaptureDate] FROM …Run Code Online (Sandbox Code Playgroud) performance sql-server partitioning sql-server-2012 query-performance performance-tuning
从分区表中获取有序数据的最有效方法是什么?
我有这样的疑问:
SELECT TOP (4000)
*
FROM dbo.MS
ORDER BY MANDT
, MBLNR
, MJAHR
, ZEILE
Run Code Online (Sandbox Code Playgroud)
表按 MBLNR 分区。
执行计划:https://www.brentozar.com/pastetheplan/? id=Bkhv5g5EF
是否有任何选项可以从执行计划中删除排序?
建表语句:
CREATE TABLE [dbo].[MS]
(
[MANDT] [NVARCHAR](3) NOT NULL
, [MBLNR] [NVARCHAR](10) NOT NULL
, [MJAHR] [NVARCHAR](4) NOT NULL
, [ZEILE] [NVARCHAR](4) NOT NULL
, [LINE_ID] [NVARCHAR](6) NOT NULL
, [PARENT_ID] [NVARCHAR](6) NOT NULL
, [LINE_DEPTH] [NVARCHAR](2) NOT NULL
, [MAA_URZEI] [NVARCHAR](4) NOT NULL
, [BWART] [NVARCHAR](3) NOT NULL
, [XAUTO] [NVARCHAR](1) NOT NULL
, [MATNR] …Run Code Online (Sandbox Code Playgroud) 我有几个关于分区的问题。我打算将现有的分区方案/函数放入table1,然后将新的分区方案/函数指向table1. 我知道如何继续这个过程,但在此之前,我想对以下问题提出一些建议/答案:
如果我删除旧的/现有的分区方案/功能以及表中的数据,旧partition.ndf文件中的数据会发生什么?它们会被删除或修改吗?
如果我删除旧的/现有的分区方案/功能,表中有数据,表中的数据会发生什么?会不会有记录丢失?
SQL Server 表上的索引是否可以比表本身消耗更多的磁盘空间?
我已经阅读了几篇文章并研究了这个和一些专家推荐的表分区,例如,这个 MSDN 论坛问题
为什么和索引可以比实际数据更大?
如何减小索引大小?
在这种情况下如何识别不必要的索引?