zoukankan      html  css  js  c++  java
  • sql server 随机读取数据

    --sql server 随机读取数据
    
    SELECT TOP 1 * FROM [tablename] ORDER BY NEWID()
    SELECT * FROM [tablename] where pk in (select top 1 pk from [tablename] ORDER BY NEWID())
    --这两个方法都需要排序,因此IO的逻辑读取会比较多,而且CPU占用也多很多
    select top 1 * from tbname TABLESAMPLE(XXX rows)
    --XXX应该为整数,算法如下:
    --按照你表的行大小,计算一个数据页大概装多少行,XXX最少为每页的行数,建议填为2-3倍每页行数
    --如果不愿意去算这个数,也可以写成如下形式:
    select top 1 * from tbname TABLESAMPLE(0.1 PERCENT)
    --由于TABLESAMPLE选项只是读取整页的数据,因此即使是很大很大的表,读取几个页的速度还是很快的
    --使用TABLESAMPLE选项,数据库随机取一个或者几个数据页,然后返回结果,不扫描索引,也不做全表扫描,也不排序。
    --这个时候不要被执行计划所误导,执行计划写的是Table Scan.
    --这个时候SET STATISTICS IO ON,你可以看到只有几个逻辑和物理读取
    --结论:最后两种速度快,效率高
  • 相关阅读:
    蓝桥杯省赛经验
    阅读笔记四
    阅读笔记二
    阅读笔记一
    动态规划——Maximum Sum of 3 Non-Overlapping Subarrays
    动态规划——Remove Boxes
    动态规划——Dungeon Game
    动态规划——Freedom Trail
    动态规划——Frog Jump
    《软件需求十步走》阅读笔记一
  • 原文地址:https://www.cnblogs.com/davidhou/p/6027669.html
Copyright © 2011-2022 走看看