连接在这两个表的主键列上完成。
我怀疑是否应该在更新之前触发选择查询,或者此查询是否是一个不错的选择?(就性能而言)
订单商品表
order_item_id
order_id
quantity
unit_price
shipping_price
business_id
workflow_id
delivery_id
item_id
订单表
billing_address_id
shipping_address_id
payment_mode
total_price
shipping_price
customer_id
order_id
以下是我从Java服务中发出的查询(使用jdbc):
UPDATE order_items t1
INNER
JOIN Orders t2
ON t2.order_id = t1.order_id
SET t1.workflow_id = ?
WHERE t1.order_item_id = ?
and t2.order_id = ?
and t2.customer_id = ?
and t1.delivery_id = ?
更新:添加show create table order_items
'CREATE TABLE `order_items` (
`order_item_id` int(20) NOT NULL AUTO_INCREMENT,
`quantity` int(10) unsigned NOT NULL,
`unit_price` int(10) unsigned NOT NULL,
`shipping_price` int(10) unsigned NOT NULL,
`pickup_date` datetime DEFAULT NULL,
`create_TS` datetime DEFAULT CURRENT_TIMESTAMP,
`update_TS` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`business_id` int(10) NOT NULL,
`order_id` int(11) NOT NULL,
`item_id` int(10) unsigned NOT NULL,
`delivery_id` int(11) NOT NULL,
`workflow_id` int(11) DEFAULT NULL,
PRIMARY KEY (`order_item_id`),
KEY `fk_business_id` (`business_id`),
KEY `fk_order_id` (`order_id`),
KEY `fk_item_id` (`item_id`),
KEY `fk_delivery_id` (`delivery_id`),
CONSTRAINT `fk_business_id` FOREIGN KEY (`business_id`) REFERENCES `business` (`MID`),
CONSTRAINT `fk_delivery_id` FOREIGN KEY (`delivery_id`) REFERENCES `delivery_mode` (`delivery_id`),
CONSTRAINT `fk_item_id` FOREIGN KEY (`item_id`) REFERENCES `item_business` (`item_id`),
CONSTRAINT `fk_order_id` FOREIGN KEY (`order_id`) REFERENCES `Orders` (`order_id`)
)
答案 0 :(得分:0)
在理论上讲话
在进行连接之前,您应该拥有之前的最小数据集,因此实际上只会对您需要的数据执行连接,即使内部更新也是如此一个特殊的选择和“在选择上写这个数据”
在实践中说话
任何dbms的工作之一就是使用数据库代数和其他东西执行激进的优化级别,所以大多数时候你花在优化查询上的时间实际上是徒劳的,因为你的dbms将执行相同的级别优化
那是什么
我会尽量让桌子尽可能地瘦,但不要太疯狂,我在aws db2.micro机器上执行了类似100k行的更新查询,它花了4秒钟,所以在我看来,试试看看你是否得到了你需要的真实结果。
tl; dr 只是尝试查看速度是否增加