【发布时间】:2021-12-29 06:38:01
【问题描述】:
我们有两个表(客户和订单)表。下面给出的这两个查询之间是否存在性能差异。
- 客户表有客户详细信息。(customerId, customerdetails)
- 订单表包含客户的订单详细信息(orderId、customerId、orderdetails),即客户 ID 将在此处重复,并且不能使用 ON_DELETE_CASCADE 外键为空。
例如查询:
select * from Order where customerId in (1,2,3,4,....)
或
select Order.* from Order inner join customer on
Order.customerId = customer.customerId where customer.customerId
in (1,2,3,4,....)
【问题讨论】:
-
性能略有不同。通过适当的索引,它可以忽略不计
-
如果来自
customer的数据既不需要输出也不需要过滤,那么它不能出现在查询中。性能下降可以是任意的 - 从无法检测到剧烈,取决于许多因素。 -
查询在形式上是不等价的,并且可以给出不同的输出,直到
order.customerId被定义为customer.customerId的外键并且 NOT NULL。 -
第一个查询应该更快,因为没有连接但是键呢?你哪里有钥匙?