TABLESAMPLE 子句将从 FROM 子句中的表返回的行数限制到样本数或行数的某一百分比。例如:

复制代码 TABLESAMPLE (10 PERCENT) /*Return a sample 10 percent of the rows of the result set. */
TABLESAMPLE (15 ROWS) /* Return a sample of 15 rows from the result set. */.不能将 TABLESAMPLE 应用于派生表、链接服务器中的表以及通过表值函数、行集函数或 OPENXML 派生的表。不能在视图或内联表值函数的定义中指定 TABLESAMPLE。

TABLESPACE 子句的语法如下:

TABLESAMPLE [SYSTEM] (sample_number [ PERCENT | ROWS ] )

[ REPEATABLE (repeat_seed) ]

注意:
TABLESAMPLE 是在 SQL Server 2005 中引入的。当 TABLESAMPLE 用于从早期版本升级的数据库时,数据库的兼容级别必须至少设置为 90。若要设置数据库兼容性级别,请参阅 ALTER DATABASE (Transact-SQL)。

当下列任一条件为真时,可以使用 TABLESAMPLE 从大型表中快速返回样本:

样本不必是单个行级别的真正随机抽样。

该表各页上的行不必与同一页上的其他行相关联。

重要提示:
如果确实需要单个行的随机抽样,则应修改查询以随机筛选出行,而不是使用 TABLESAMPLE。例如,以下查询使用 NEWID 函数返回 Sales.SalesOrderDetail 表的大约百分之一的行:

SELECT * FROM Sales.SalesOrderDetail

WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)

/ CAST (0x7fffffff AS int)

SalesOrderID 列包括在 CHECKSUM 表达式中,从而 NEWID() 每次计算一行以获取每行抽样。表达式 CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float / CAST (0x7fffffff AS int) 的计算结果为介于 0 和 1 之间的随机 float 值。

使用 SYSTEM 选项
SYSTEM 指定与 ANSI SQL 实现相关的抽样方法。指定 SYSTEM 是可选的,但是此选项是 SQL Server 中唯一可用的抽样方法,并且是默认应用的方法。

TABLESAMPLE SYSTEM 返回行的近似的百分比,并针对表中每个物理 8 KB 页生成随机值。样本中可以包括页,也可以不包括页,具体情况根据页的随机值以及查询中指定的百分比来确定。样本中包含的每一页都返回样本结果集中的所有行。例如,如果指定 TABLESAMPLE SYSTEM 10 PERCENT,则 SQL Server 返回该表的大约 10% 的指定数据页中的所有行。如果这些行均匀分布在表的各页上,并且表中存在足够多的页,则返回的行数应接近所需样本的大小。但是,由于针对每页生成的随机值与针对任何其他页生成的值无关,因此,返回的页百分比可能会大于或小于所需的百分比。可以使用 TOP(n) 运算符将行数限制到指定的最大数。

指定行数而不是指定基于表中总行数的百分比时,此数将转换为行数的百分比,进而转换为应返回的页数的百分比。然后使用此计算得到的百分比执行 TABLESAMPLE 操作。

如果表由一页组成,则返回此页上的所有行或不返回任何行。在这种情况下,TABLESAMPLE SYSTEM 只能返回页上的 100% 或 0% 行,而无论页上的行数是多少。

针对特定表使用 TABLESAMPLE SYSTEM,限制了在此表中使用表扫描计划的执行(如果存在堆或聚集索引,则为堆的扫描或聚集索引的扫描)。尽管计划显示已执行表扫描,但实际上只需要从数据文件中读取结果集中包含的那些页。

重要提示:
使用 TABLESAMPLE SYSTEM 子句时应谨慎,还应了解使用样本的某些影响。例如,两个表的联接可能返回两个表中每行的匹配行;但是,如果对两表中任意一个指定 TABLESAMPLE SYSTEM,则从未抽样表中返回的某些行不大可能具有抽样表中的匹配行。此行为可能使您怀疑基础表中是否存在数据一致性的问题,但实际上数据是有效的。同样,如果针对联接的两个表指定 TABLESAMPLE SYSTEM,则发现的问题可能会更严重。

使用 REPEATABLE 选项
REPEATABLE 选项导致再次返回选定的样本。使用同一个 repeat_seed 值指定 REPEATABLE 时,只要未对表进行任何更改,SQL Server 将返回相同的行子集。使用其他 repeat_seed 值指定 REPEATABLE 时,SQL Server 通常将返回表中行的不同样本。对表的以下操作将视为更改:插入、更新、删除、索引重建、索引碎片整理、还原数据库和附加数据库。

示例
A. 选择行的百分比
Person.Contact 表包含 19,972 行。下列语句将返回大约 10% 的行。每次执行此语句时,返回的行数通常都不同。

复制代码 USE AdventureWorks ;
GO
SELECT FirstName, LastName
FROM Person.Contact
TABLESAMPLE (10 PERCENT) ;B. 选择带有种子值的行的百分比
每次执行时,下列语句都将返回同一组行。种子值 205 是任意选择的。

复制代码 USE AdventureWorks ;
GO
SELECT FirstName, LastName
FROM Person.Contact
TABLESAMPLE (10 PERCENT)
   REPEATABLE (205) ;C. 选择若干行
下列语句将返回大约 100 行。实际返回的行数可能会有很大差异。如果指定较小的数值,例如 5,则在示例中可能收不到任何结果。

复制代码 USE AdventureWorks ;
GO
SELECT FirstName, LastName
FROM Person.Contact
TABLESAMPLE (100 ROWS) ;

使用 TABLESAMPLE 限制结果集相关推荐

  1. PostgreSQL集群方案-Postgres-XL

    Postgres-XL 主机 系统 hostname 192.168.1.42 centos7 node1 GTM 192.168.1.43 centos7 node2 gtm_proxy.Coord ...

  2. Postgres-XL数据库集群安装

    Postgres-XL数据库集群安装 第一部分 1.1 Postgres-XL官方文档 1.2 Postgres-XL安装规划 1.3 Postgres-XL组件简介 第二部分 2.1 修改系统主机名 ...

  3. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

  4. 【Kubernetes】如何使用Kubeadm部署K8S集群

    一 . 准备机器 本次环境采用华为云ECS弹性云服务器部署(也可以使用VMware) vm01(2V4G): Ubuntu_18.04作为K8S master节点 vm02(1V1G): Ubuntu ...

  5. mysql修改校对集_MySQL 教程之校对集问题

    本篇文章主要给大家介绍mysql中的校对集问题,希望对需要的朋友有所帮助! 推荐参考教程:<mysql教程> 校对集问题 校对集,其实就是数据的比较方式. 校对集,共有三种,分别为:_bi ...

  6. Redis集群管理方式

    Redis的有三种集群方式:主从复制,哨兵模式和集群. 主从复制 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC后执行BGSAVE命令生成RDB文件,并使用缓冲区记录此后执行的所有写 ...

  7. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  8. 命名实体识别训练集汇总(一直更新)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/leitouguan8655/artic ...

  9. 理解和实现分布式TensorFlow集群完整教程

    手把手教你搭建分布式集群,进入生产环境的TensorFlow 分布式TensorFlow简介 前一篇<分布式TensorFlow集群local server使用详解>我们介绍了分布式Ten ...

最新文章

  1. Django-缓存的配置
  2. 用Python开始机器学习(3:数据拟合与广义线性回归)
  3. Tomcat+JSP经典配置实例
  4. 无法使用共享文件夹?VMware怎么安装VMware Tools? (GCC、kernel headers、make)(失败)
  5. GDCM:gdcm::VR的测试程序
  6. A Convolutional Neural Network for Modelling Sentences阅读笔记
  7. OpenStack Juno系列之计算节点搭建
  8. 称洗澡时突遭电击 承租人起诉“自如”索赔77735元
  9. 5 questions
  10. 在CentOS7上实现NFS共享
  11. oracle无会话锁表,深入浅出oracle锁 原理篇 停止无反应的sql会话
  12. python基础7-函数
  13. html全局背景代码,html背景代码
  14. 实现企业战略目标从做好项目管理开始
  15. 新闻分析:微软到底需要雅虎什么?
  16. Unity 2D横版闯关游戏 (JUNGLE RULES)
  17. 道尔生物与Lonza合作开发多特异性生物治疗药物;南京维立志博与百济神州达成合作 | 医药健闻...
  18. 腾讯云直播代码 java_JAVA 对接腾讯云直播的实现
  19. 搜索引擎常用site语法baidu/google
  20. 面向对象C#初级入门精讲(2)C#语言基础-徐照兴-专题视频课程

热门文章

  1. 前端学习(2337):angular之管道
  2. 前端学习(2185):tabberitem和路由结果
  3. 前端学习(757):预解析
  4. 前端学习(495):嵌入代码与外部文件和文档模式
  5. mybatis学习(4):工具类和实体类的创建
  6. 玩转oracle 11g(44):数据库发展历史
  7. java学习(15):巩固练习
  8. Github|类别不平衡学习资源(下)
  9. hiveserver2 mysql_HiveServer2的配置使用
  10. 设置dns_网络速度缓慢怎么办?轻松一键修改DNS设置让网速提升五倍