--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,你可以看到只有几个逻辑和物理读取 --结论:最后两种速度快,效率高