TableSample 平时用得少,基本上就是用于表里面抽样数据来看的。

用法如下

SELECT * FROM tbname TABLESAMPLE SYSTEM (N PERCENT/M Rows)  REPEATABLE()
TABLESAMPLE SYSTEM 这个表示使用System的方法进行数据抽样。(目前我也只知道有System这个方法)
N PERCENT/M Rows 可以选择抽样多少行,也可以抽样多少百分比
REPEATABLE 关键字里面还可以填入一个种子值,填充了之后每次可以得到一致的结果。
下面做实验,创建一个测试表
CREATE TABLE [dbo].[Tmp123]
(
[ID] [int] NOT NULL IDENTITY(1, 1),
[Col1] [char] (200)
) ON [PRIMARY]
GO

塞进去500条数据

INSERT INTO dbo.Tmp123
( Col1 )
VALUES ( 'abcd' ) GO 500

大概看了一下下,DBCC IND('Test','Tmp123',-1) 占用了15个数据页,然后我们使用 tablesample 来进行抽样

SELECT *
FROM dbo.Tmp123 TABLESAMPLE (25 ROWS)

这里执行之后发现。大概2次有1次没有返回任何数据,然而返回的数据也并不是准确的25条。

这就是TableSample 的特性,是因为sql server 会根据System方法随机决定是否要读取该数据页的数据进行显示,只能说,请求的行数越多,会越接近TableSample里面请求的行数。

那我们就可以进行一个变形

SELECT top 25 *
FROM dbo.Tmp123 TABLESAMPLE (25 ROWS)

加上Top 去控制,那么得到的行,最多是25行,但是也会有少于25行的情况出现。so ……你懂的~

然后再说下我了解到的情况,为什么返回的几率是差不多一半一半呢?是这样纸的

1、这个表占用了15个数据页,总数据量是500条,我请求了25条 ,占比是  25/500 = 5% (是的,无论请求行数还是百分比,都会转换为百分比进行运算)

2、那么每个数据页的读取可能性就是 5% 了~一共15个数据页,其中没有结果返回的概率是  (1-5%)^15 = 43% ,差不多50%,所以调用的时候就觉得一半一半,样例越多越趋近这个结果

3、那如果现实的行比实际多,也是因为这个概率问题。如果表里面的数据越多,请求的行数越多,越接近请求的值。

4、如果真想精确的控制行数来实现随机,那么请用

SELECT top 25 *
FROM dbo.Tmp123
ORDER BY NewID()

好~说完了~

今天说一下 tablesample 这个东西的更多相关文章

  1. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  2. iOS有关横向TableView的东西

    之前看到Apple store里面有横向的tableview,当然也有可能是collectionview啦. 尤其是项目中只有一条那么需要横向滑动的东西,就没有必要使用庞大的collectionvie ...

  3. 使用ENode框架前您需要了解的东西(初稿)

    选择ENode意味着什么可能很多人还不太清楚.我简单整理了一下: 意味着你选择了:你需要做DDD领域建模.选择了事件驱动的架构.选择了CQRS架构.选择了最终一致性.选择了事件溯源.选择了分布式.这些 ...

  4. 如何写出高质量的技术博客 这边文章出自http://www.jianshu.com/p/ae9ab21a5730 觉得不错直接拿过来了 好东西要大家分享嘛

        如何写出高质量的技术博客?答案是:如果你想,就一定能写出高质量的技术博客.看起来很唯心,但这就是事实.有足够愿力去做一件目标明确,有良好反馈系统的事情往往很简单.就是不停地训练,慢慢地,你自己 ...

  5. Intellij IDEA的一些东西

    Intellij IDEA的一些东西 2016-03-19 15:26 Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + N 根据输入的 类名 查找类文件 Ctrl + Ctrl + ...

  6. 神奇的BFC以及被忽略的东西

    BFC是CSS中一个非常重要的概念,经常用来清除浮动以及处理外边距折叠,但BFC到底是个什么东西却很难准确的表达清楚,国内的相关技术文档基本都不全面,本文的目的就是对BFC的方方面面做个整理,当然未必 ...

  7. 关于这个博客以及C++入门该懂的一些东西

    给三牧中学c++入门的同学们看的博客. 大概是入门一类的?说不定会写点自己的结题报告. 写的不好/写错了别怪我,蒟蒻瑟瑟发抖. 天哪要开始写入门了我好慌那么接下来是编译器连接. (本蒟蒻喜欢用DEV ...

  8. LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  9. 前端er是否忽略了某些东西?——读《ppk谈JavaScript》

    关于书 “不知道ppk的网站QuirksMode,说明你可能还没有真正成为资深的JavaScript程序员.” ——Roger Johansson,瑞典资深Web专家. ppk是世界级前端技术专家,W ...

随机推荐

  1. Appcelerator Titanium Studio: JNI_CreateJavaVM missing error

    Mac升级到Yosemite后,Titanium Studio启动不了,报Appcelerator Studio: JNI_CreateJavaVM missing error 之类的错误,重装了Or ...

  2. C#Winform VScrollBar+Pannel自定义列表控件(原)

    该控件的主要实现思路是用的objective-c中的自定义控件思路,主视图中放子视图 效果图 (窗体调用代码) public partial class Form1 : RibbonForm { Li ...

  3. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  4. get传递中文产生乱码的解决方式汇总

    1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncodin ...

  5. 【背景建模】PbModel

    PbModel是基于概率模型的背景差分算法,其基本思想是像素点会因光照变化.运动物体经过产生多种颜色值,但是一段时间内,像素点处于静止状态的时间会比处于运动状态的时间长.因而一段时间内,像素点某个颜色 ...

  6. Hibernate入门案例配置以及增、删、改、查看

    享受痛苦就是走向成功的第一步. 一.创建一个项目(lib里面是需要的夹包小奶瓶要导包) 二.书写大配置文件 大配置文件必须放置在项目根目录(专业classpath下):界定:就是src 1名称:hib ...

  7. 为友盟消息推送开发的PHP SDK(composer版):可以按省发Android push

    一直以来APP希望按省市县推送Android push,只能自己分析用户经纬度,打tag发送. 现在终于有服务商提供了. 友盟消息推送 可以“按省推送”,很方便. 我为友盟做了PHP SDK(comp ...

  8. Harp – 内置常用预处理器的静态 Web 服务器

    Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...

  9. 极富创意的3D文件夹切换效果

    今天分享的是一个极富创意的文件夹切换效果.这个案例使用CSS 3动画实现了一个3D的平行六面体旋转效果.点击顶部的3个按钮可以旋转并切换.另外,每个六面体本身是一个文件夹,点击后可以展开查看里面的详情 ...

  10. [应用][js+css3]3D盒子导航[PC端]

    CSS3构建的3D盒子之导航应用 1.在用css3构建的盒子表面,放上iframe,来加载导航页面. 2.鼠标左键按下移动可旋转盒子,寻找想要的网址. 3.左键单机盒子表面,将全屏现实所点盒子表面的网 ...