Rus*_*960 3 sql-server-2008 sql-server
当我运行以下命令时,我得到 3 个索引列:
SELECT b.name,
c.name
FROM sys.index_columns a
INNER JOIN sys.indexes b ON a.object_id = b.object_id
AND a.index_id = b.index_id
INNER JOIN sys.columns c ON b.object_id = c.object_id
AND a.column_id = c.column_id
WHERE b.object_id = OBJECT_ID('dbo.MyTableIssue')
AND b.name = 'IX_MyTableIssue_ColId_Col2Id'
Run Code Online (Sandbox Code Playgroud)
返回:
IX_MyTableIssue_ColId_Col2Id ColId
IX_MyTableIssue_ColId_Col2Id Col2Id
IX_MyTableIssue_ColId_Col2Id ColDate
Run Code Online (Sandbox Code Playgroud)
但是当我右键单击,脚本索引然后创建到新的查询窗口时,我得到以下信息:
CREATE NONCLUSTERED INDEX [IX_MyTableIssue_ColId_Col2Id] ON [dbo].[MyTableIssue]
(
[ColId] ASC,
[Col2Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
Run Code Online (Sandbox Code Playgroud)
我正在运行 SQL Sever 2008。非常感谢任何建议或方向。
Geo*_*son 11
如果在分区表上创建了非聚集索引,则该索引将默认为分区对齐,除非您明确指定不应如此(例如,用于ON [PRIMARY]
指定文件组)。
在这种情况下,SSMS 脚本索引功能不会显示使用的分区方案,但您可以sp_help
在表上使用以确认非聚集索引已分区。
如果展开查询以检查 上的所有列sys.index_columns
,您将看到该partition_ordinal
列设置为1
for ColDate
,表示这是一个分区列,key_ordinal
设置为0
,表示它是“不是关键列”。
这是一个带有虚拟表的完整再现:
-- Create dummy partition function and scheme
CREATE PARTITION FUNCTION pf_test (INT)
AS RANGE RIGHT
FOR VALUES (1,2)
GO
-- Create dummy partition function and scheme
CREATE PARTITION SCHEME ps_test
AS PARTITION pf_test_transactionId
ALL TO ( [PRIMARY] )
GO
-- Create dummy partitioned table
CREATE TABLE dbo.testPartitionedTable (
id INT NOT NULL,
a INT NOT NULL,
b INT NOT NULL,
c INT NOT NULL,
CONSTRAINT PK_testPartitionedTable PRIMARY KEY (a, id) ON ps_test(id)
)
-- Create the non-clustered index
CREATE INDEX IX_testPartitionedTable ON dbo.testPartitionedTable (b)
GO
-- Run your query for inspecting the index columns
SELECT b.name,
c.name,
a.*
FROM sys.index_columns a
INNER JOIN sys.indexes b ON a.object_id = b.object_id
AND a.index_id = b.index_id
INNER JOIN sys.columns c ON b.object_id = c.object_id
AND a.column_id = c.column_id
WHERE b.object_id = OBJECT_ID('dbo.testPartitionedTable')
AND b.name = 'IX_testPartitionedTable'
GO
Run Code Online (Sandbox Code Playgroud)