就本问题而言,其结果或准确性无关紧要.我只是想知道是否可以查询表的前1000行.这可能只产生100个结果,或者它可能返回1000.我不想明确限制结果,只需要查询的行数.
既然你不关心你得到什么结果,我会在这些场景中找到tableample.
当满足以下任一条件时,您可以使用TABLESAMPLE快速从大表中返回样本:
- 样本不必是单个行级别的真正随机样本.
- 表的各个页面上的行与同一页面上的其他行不相关.
SELECT DISTINCT
D.SomeValue
FROM
dbo.MyTable AS D TABLESAMPLE(1000 ROWS);
Run Code Online (Sandbox Code Playgroud)
将要发生的是数据库引擎将占用大约1k行然后过滤它.如何获取这些行无关紧要,因为您不在乎,您只想查看该数据集合中的唯一值.
您可能需要运行几次.对我16M行表的前3次运行没有结果.
有关无结果问题的更多信息,有一个很好的写作 采样使用TABLESAMPLE h/t给马丁史密斯
如果查询是简单,只有1表FROM子句中,你可以简单地改变SELECT <columns>到SELECT TOP 100 <columns>(注意:不是,如果它是一个DISTINCT).
如果查询更复杂,多次引用多个表和/或单个表,则可以更改要限制的表的出现位置,即更改:
SELECT ...
FROM ... -- some tables
<table_name> AS x
... -- some more joins
WHERE ...
... ;
Run Code Online (Sandbox Code Playgroud)
至:
SELECT ...
FROM ... -- some tables
( SELECT TOP 100 *
FROM <table_name>
ORDER BY <some_columns> -- without ORDER BY if you don't care
-- which 100 rows will be checked
) AS x
... -- some more joins
WHERE ...
... ;
Run Code Online (Sandbox Code Playgroud)
另一种方法,它将使用简单的情况(无论是否具有DISTINCT)以及查询是否更复杂,多次引用表并且您希望限制该表的所有出现:
WITH table_name AS
( SELECT TOP 100 *
FROM <table_name>
ORDER BY <some_columns> -- without ORDER BY if you don't care
-- which 100 rows will be checked
)
SELECT ...
--- your query unchanged ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |