【发布时间】:2010-10-24 10:21:01
【问题描述】:
我有一个 6GB 大小的数据库,其中包含大量表,但是较小的查询似乎问题最多,并且想知道可以做些什么来优化它们,例如有一个 Stock、Items 和 Order 表.
Stock 表是库存商品,其中包含大约 100,000 条记录,其中 25 个字段存储 ProductCode、Price 和其他库存特定数据。
Items 表存储有关项目的信息,其中有超过 2,000,000 个,其中超过 50 个字段存储项目名称和有关项目或产品的其他详细信息。
Orders 表存储库存商品的订单,即下订单的时间加上售价,并且有大约 50,000 条记录。
这是来自该数据库的查询:
SELECT Stock.SKU, Items.Name, Stock.ProductCode FROM Stock
INNER JOIN Order ON Order.OrderID = Stock.OrderID
INNER JOIN Items ON Stock.ProductCode = Items.ProductCode
WHERE (Stock.Status = 1 OR Stock.Status = 2) AND Order.Customer = 12345
ORDER BY Order.OrderDate DESC;
鉴于此处的信息可以采取哪些措施来改进此查询,还有其他类似的方法,还有哪些替代方法。但是,无法进一步详细说明数据和数据库的性质,因此如果给出一般的优化技巧和方法,这些将很好,或者任何通常适用于数据库的东西。
数据库是 Windows Server 2003 上的 MS SQL 2000,每个数据库都有最新的服务包。
数据库升级/操作系统升级目前不是选项。
编辑
上述表格中的索引为 Stock.SKU、Items.ProductCode 和 Orders.OrderID。
对于这样的查询,执行计划是 13-16 秒,75% 的时间花在 Stock
感谢到目前为止的所有回复 - 索引似乎是问题所在,给出的所有不同示例都有帮助 - 尽管查询存在一些错误,但这对我有很大帮助,其中一些查询运行得更快,但是结合索引建议,我认为我现在可能走在正确的道路上 - 感谢您的快速回复 - 真的帮助了我,让我考虑到我以前没有想过或不知道的事情!
索引是我的问题,在带有订单(客户)的外键中添加了一个,这
通过将执行时间减半来提高性能!
看起来我有狭隘的视野并专注于查询 - 我已经与 DB 合作了几年,但这非常有帮助。但是感谢所有查询示例,它们是我没有考虑过的组合和功能也可能有用!
【问题讨论】:
-
您需要发布一些执行计划的详细信息,以便人们知道从哪里开始。无论如何,一个典型的查询需要多长时间?
-
查询需要 13-16 秒才能运行我有类似的查询,它们主要使用这些表,主要是 Items 和 Stock,执行时间相似 - 大部分都花在 Stock 上,
-
然后明确地向 Stock.Status 和 Order.Customer 添加索引!
标签: sql sql-server database optimization