使用 TABLESAMPLE 限制结果集

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) ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Catalan数(数论)

Catalan数 【参考网址】http://www.cnblogs.com/gongxijun/p/3232682.html 记得当时我们队写过一个,差点超时,现在找到了公式,感觉还是挺简单的。 还要注意,就算开long long 也只能表示到第33个,之后就会溢出。 &…

C#参考资料

C#参考资料 C# 读写XML文件 xmlDocumentC#时间函数c#读写XML文件在C#中使用异步Socket编程实现TCP网络服务的CS的通...C# socket传文件c#调用API要点

java面向_java是面向什么的语言?

Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,…

RAISERROR (Transact-SQL)

来源: SQL Server 2005 联机丛书 生成错误消息并启动会话的错误处理。RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义消息,也可以动态建立消息。该消息作为服务器错误消息返回到调用应用程序,或返回到 TRY…CATCH 构造的关联 CAT…

使用awk取passwd10-20行然后重定向

1、先找到要做实验的文件cp。 cp /etc/passwd /tmp/xusx 2、使用awk取passwd10-20的第三列从定向输出test.txt 第一步 awk NR>10 && NR<20 /tmp/xusx/passwd >>/tmp/xusx/test.txt 第二步 rootlocalhost xusx]# awk NR>10 && NR<20 /tmp/x…

jsp mysql做登入界面_用jsp实现网站登录界面的制作,并连接数据库

这里介绍一下怎样连接数据库&#xff0c;并用jsp制作一个简单的登录界面1.首先需要搭建好环境&#xff0c;有Tomcat&#xff0c;eslipse,jdk等&#xff0c;并配置好环境变量&#xff0c;并安装好数据库&#xff0c;这里我使用的数据库是mysql数据库&#xff0c;并下载了一个MyS…

decimal 和 numeric (Transact-SQL)

带固定精度和小数位数的数值数据类型。 decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 固定精度和小数位数。使用最大精度时&#xff0c;有效值从 - 10^38 1 到 10^38 - 1。decimal 的 SQL-92 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。p&#xff08;精度…

java流的应用_Java中I/O流的应用

Java中I/O流的应用iLeGeNDpackagecom.hp.io;/** I/O流的应用 * 实现目标&#xff1a; * 首先创建一个文件 * 通过键盘向文件添加内容 * 然后把文件的内容打印到控制台 * */import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import ja…

PHP的反射类ReflectionClass、ReflectionMethod使用实例

PHP5 具有完整的反射API&#xff0c;添加对类、接口、函数、方法和扩展进行反向工程的能力。 反射是什么&#xff1f; 它是指在PHP运行状态中&#xff0c;扩展分析PHP程序&#xff0c;导出或提取出关于类、方法、属性、参数等的详细信息&#xff0c;包括注释。这种动态获取的信…

java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...

多线程的实现方式&#xff1a;demo1、demo2demo1&#xff1a;继承Thread类&#xff0c;重写run()方法packagethread_test;public class ThreadDemo1 extendsThread {ThreadDemo1(){}ThreadDemo1(String szName){super(szName);}//重载run函数public voidrun() {for(int count …

word2007鼠标不好用

因为我装了 Powerdesigner 12.5&#xff0c;这个 COM 插件和 Word 2007 有冲突&#xff0c;所以导致了上面的问题&#xff0c;只要在 Word 移除这个 Addin 就可以了&#xff1a;左上角office图标——office选项——加载项——管理加载项——转到——去掉Powerdesigner Add-In前…

Axure5.1不能输入中文问题.

不能输入中文问题默认输入法改成“英语&#xff08;美国&#xff09;——美式键盘”。然后再进行切换就可以了。

java 静态线程_Java线程类静态本机void yield()方法(带示例)

线程类静态本机无效 yield()软件包java.lang.Thread.yield()中提供了此方法。yield()方法表示停止当前正在执行的线程&#xff0c;并为其他优先级相同的等待线程提供机会。如果没有等待线程&#xff0c;或者所有等待线程的优先级都较低&#xff0c;则同一线程将继续执行。这种方…

学习资料(不定更新)

w3cschool : http://www.w3school.com.cn/h.asp 菜鸟教程&#xff1a;http://www.runoob.com/ 51CTO: http://www.51cto.com/ angularjs: https://angularjs.org/ Python学习大本营: http://www.pythondoc.com/ http://webpy.org/ 比较好用的图表JS框架&#xff1a; http://www…

PowerDesigner物理数据模型

物理数据模型 name 显示名称code 生成代码中的名称comment 生成代码中备注生成代码中特例&#xff1a;外键名在Integrity——Constraint name主键名Constraint name

struts2-19-合法用户上传文件

一&#xff1a;登录页面 成功&#xff1a;--->upload.jsp 失败&#xff1a;返回错误信息&#xff08;用户名或者密码错误&#xff09; 二&#xff1a;上传文件 登录成功&#xff1a;上传成功 未登录&#xff1a;--->login.jsp错误信息&#xff08;请登录&#xff09; 三…

java 多线程生产者_java-Runnable加锁实现生产者和消费者的多线程问题

//库存函数&#xff0c;保存着库存的信息Storage.javapublic classStorage {//模拟库存public Integer num1;}//生产者函数 product.java/************************************************************Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.FileName: Customer.j…

Axure共享问题

获取共享项目 文件——获取共享项目——\\192.168.0.212\axureshare\HZ下一步——选择本地保存路径 签入签出 A签出——修改——签入——B获新就能看到新的了A签出的时候B不能更改 当A签出时&#xff0c;B无法查看动态面板的每个状态此时可以把面板复制到自己的页面看 修改中可…

maven项目和普通项目转换

转载于:https://www.cnblogs.com/yver/p/6054131.html