Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否基于不在主键中的列对SQL Server表进行分区?_Sql Server - Fatal编程技术网

Sql server 是否基于不在主键中的列对SQL Server表进行分区?

Sql server 是否基于不在主键中的列对SQL Server表进行分区?,sql-server,Sql Server,假设我有一张这样的桌子: create table test_partitions ( pk_id int not null, col1 nvarchar(20), col2 nvarchar(100), constraint pk_test_partitions primary key (pk_id, col1) ); 我想对这个表进行分区以提高查询性能,这样我就不必在每次需要某些东西时都查看整个表。因此,我添加了一个计算列: create table t

假设我有一张这样的桌子:

create table test_partitions 
(
    pk_id int not null,
    col1 nvarchar(20),
    col2 nvarchar(100),

    constraint pk_test_partitions primary key (pk_id, col1)
);
我想对这个表进行分区以提高查询性能,这样我就不必在每次需要某些东西时都查看整个表。因此,我添加了一个计算列:

create table test_partitions 
(
    pk_id int not null,
    partition_id as pk_id % 10 persisted not null,
    col1 nvarchar(20),
    col2 nvarchar(100),

    constraint pk_test_partitions primary key (pk_id, col1)
);

因此,每当我从pk_id=123的test_分区中选择*时,我希望SQL Server只查看整个表的十分之一。我不想将
partition\u id
列添加到主键,因为它永远不会是where子句的一部分。如何在
分区\u id
上对表进行分区?

刚才我做了测试并找到了解决方案

SELECT TOP ((SELECT COUNT(*) [TABLE_NAME])/10)     
* FROM [TABLE_NAME]

它返回您记录的十分之一

刚才我做了测试并找到了解决方案

SELECT TOP ((SELECT COUNT(*) [TABLE_NAME])/10)     
* FROM [TABLE_NAME]

它将返回十分之一的记录

为了提高查询性能,您可以应用分页。也就是说,您可以使用获取下一个查询来实现输出。 请通读更多细节

  SELECT column-names FROM table-name
  ORDER BY column-names 
  OFFSET n ROWS
  FETCH NEXT m ROWS ONLY

要提高查询性能,可以应用分页。也就是说,您可以使用获取下一个查询来实现输出。 请通读更多细节

  SELECT column-names FROM table-name
  ORDER BY column-names 
  OFFSET n ROWS
  FETCH NEXT m ROWS ONLY

您不需要对其进行分区。您只需要添加一个非聚集索引。要查看是否正在使用索引/分区,请检查查询计划。如果主键具有前导列
pku id
,则不需要额外的非聚集索引或任何分区(如图所示)上面的聚集索引将允许您的谓词被很好地查找。@MartinSmith您是对的,我甚至没有意识到OP认为聚集索引没有帮助。。。因此,我重申:在做出假设之前,请检查查询计划!你不需要把它分割。您只需要添加一个非聚集索引。要查看是否正在使用索引/分区,请检查查询计划。如果主键具有前导列
pku id
,则不需要额外的非聚集索引或任何分区(如图所示)上面的聚集索引将允许您的谓词被很好地查找。@MartinSmith您是对的,我甚至没有意识到OP认为聚集索引没有帮助。。。因此,我重申:在做出假设之前,请检查查询计划!