SQL:有效地获取最后一条记录

时间:2016-08-12 07:34:41

标签: sql sql-server database sql-server-2012

我有一个包含订单日期的表格订单。

WarehouseId | OrderId | ItemId | OrderDate
-------------------------------------------
          1 |       1 |      1 | 2016-08-01
          1 |       2 |      2 | 2016-08-02
          1 |       3 |      5 | 2016-08-10
          2 |       1 |      1 | 2016-08-05
          3 |       1 |      6 | 2016-08-06

(表格已简化,仅显示必填字段)

如何有效地选择特定仓库的最后一个订单?我现在这样做:

SELECT TOP 1 * FROM tblOrder WHERE WarehouseId = 1 ORDER BY OrderDate DESC

我担心的是,当我有特定仓库的百万(或更多)订单时,通过排序并选择第一条记录,它会太慢(我想?)。

有没有更有效的方法来选择最后的订单记录?

由于

1 个答案:

答案 0 :(得分:1)

如果您打算这么做,可以考虑在// Get the Result Set $result = mysql_query("SELECT p.id, p.manufacturer, p.reference, p.name, p.quantity FROM my_products p"); // Convert the rows and columns from the Result Set to a PHP Array $data = array(); // empty array while ($row = mysql_fetch_assoc($result)) { $data[] = $row; } // Now you have access any row or column echo "<table>"; foreach($data as $row){ // prepare the data $formatttedQuantity = number_format($row['quantity'], 2, '.', ''); // show each Table Row echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['manufacturer'] . "</td>"; echo "<td>" . $row['reference'] . "</td>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $formatttedQuantity . "</td>"; echo "</tr>"; } echo "</table>"; 字段上设置索引。这会加快速度(但要注意它可能会对这个表的其他查询产生影响 - 这是一个复杂的话题,与DBA交谈!)。

否则,您的查询没问题,除非您在有相同日期的情况下担心排序,在这种情况下您应该决定要订购的辅助字段,例如OrderID(您在评论中建议) )。