[英]How to improve speed sorting by datetime field from another table?
我有一个包含数十万条记录的产品表。 基本的表格结构如下:
ProductID (int pk) | ObjectID (int fk) | ProductTitle | Price
101 | 5005 | Toothbrush | 1.50
我还有一个用于对象的表,该表存储有关不同对象的信息,但是主要存储对象的创建者和创建时间。
ObjectID (int pk) | DateCreated (datetime) | UserID
5005 | 2017-11-16 13:00:00 | 50
以下查询选择“产品”,运行时间为半秒:
SELECT
p.*
FROM
dbo.Products p
ORDER BY
ProductID DESC
以下查询耗时将近3.5秒
SELECT
p.*
FROM
dbo.Products p
INNER JOIN
dbo.Objects o ON
o.ObjectID = p.ObjectID
ORDER BY
o.DateCreated DESC
Products
表中的ObjectID
已设置为Objects
表的外键。 它还具有唯一索引。
Objects
的DateCreated
字段也已建立索引。
为什么第二个查询的运行速度慢5倍,只是因为我是从另一个表中按DateTime
字段排序的? 我知道,以int
排序将意味着更快,尤其是在将其聚集时,但是我并不期望两者之间的差异如此之大。
有什么建议吗? 我正在使用SQL Server 2016。
要真正了解正在发生的事情,您需要查看执行计划。 但是,结果不足为奇。
第一个查询更快,因为-大概-查询可以使用表上的索引来order by
。 如果id是主键,我将不会感到惊讶,从而使订购更加高效。
第二个查询速度较慢,因为order by
可能正在执行实际排序。 将表连接在一起时经常需要这样做。
Objects(DateCreated, ObjectId)
上的索引可能会更有效率。 SQL Server是否决定使用它取决于表的统计信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.