Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时是使用SQL语句的适当时间;从[tables]中选择[results],其中[conditions]仅获取前[n]行;_Sql_Select - Fatal编程技术网

何时是使用SQL语句的适当时间;从[tables]中选择[results],其中[conditions]仅获取前[n]行;

何时是使用SQL语句的适当时间;从[tables]中选择[results],其中[conditions]仅获取前[n]行;,sql,select,Sql,Select,我不确定只选择一定数量的行是否比简单地生成更具体的select语句更好。我有一种感觉,我错过了一些非常直接的东西,但我无法理解。我对任何SQL的使用经验都不到6个月,而且还很粗略,所以如果这是一个非常简单的问题,我很抱歉,但我找不到明确的答案。通常是自定义分页。当您想向用户显示值时,您可能只需要N行。通常,数据库服务器可以获取前N行,比获取所有行的速度快,因此屏幕重画可以快一点 Oracle甚至有一个名为FIRST_ROWS的提示,表明快速恢复数据比高效恢复数据更重要。我们之所以使用该语句,原因

我不确定只选择一定数量的行是否比简单地生成更具体的select语句更好。我有一种感觉,我错过了一些非常直接的东西,但我无法理解。我对任何SQL的使用经验都不到6个月,而且还很粗略,所以如果这是一个非常简单的问题,我很抱歉,但我找不到明确的答案。

通常是自定义分页。

当您想向用户显示值时,您可能只需要N行。通常,数据库服务器可以获取前N行,比获取所有行的速度快,因此屏幕重画可以快一点


Oracle甚至有一个名为FIRST_ROWS的提示,表明快速恢复数据比高效恢复数据更重要。

我们之所以使用该语句,原因如下:

  • 只显示最相关的结果(比如前100个),而不必将所有行从数据库传输到客户端。在本例中,我们还使用orderby

  • 我们只是想知道是否有匹配的行,并提供一些示例。在这种情况下,我们不会对结果进行排序,而且“先获取”比让数据库准备传输大量行然后将它们扔掉给客户端要便宜得多。这通常是在软件开发期间,当需要了解某个SQL是否正确时


  • SQL的设计者同意您的观点,这就是为什么标准SQL不包括top/limit/fetch first等。

    想想谷歌搜索结果和搜索结果的页面数量


    虽然很明显,在他们的案例中还有更多的内容,但这就是想法。

    我知道两种常用用法:

    分页:确保指定一个顺序。如果没有指定顺序,许多db实现会使用任何便于执行查询的方法。这种“最优”排序行为可能会产生非常不可预测的结果

    SELECT top 10 CustomerName
    FROM Customer
    WHERE CustomerID > 200 --start of page
    ORDER BY CustomerID
    
    子查询:可以发出子查询的许多地方都要求结果为单个值。在许多情况下,top 1的速度比max快

    --give me some customer that ordered today
    SELECT CustomerName
    FROM Customer
    WHERE CustomerID =
    (
      SELECT top 1 CustomerID
      FROM Orders
      WHERE OrderDate = @Today
    )
    

    除了分页之外,任何时候您想要从表中获得最多或最少的[insert metric here]行,按[Anwhere metric]排序并限制为1行,IME,都比使用MIN/MAX进行子查询要好。引擎可能会有所不同