[英]Update table columns based on values in other table
我有兩張桌子
showroom
============================================
model_id car_name is_available
--------------------------------------------
0 rav4 false
1 tacoma false
2 corolla false
3 tundra false
和
warehouse
========================
model_id car_name
------------------------
0 rav4
1 tacoma
主鍵是model_id
。 如果model_id
存在於warehouse
我想將列showroom.is_available
更新為 true 。 所以根據上面的例子輸出將是
showroom
============================================
model_id car_name is_available
--------------------------------------------
0 rav4 true
1 tacoma true
2 corolla false
3 tundra false
我知道我能做到
UPDATE showroom
SET is_available = true
WHERE model_id IN (
SELECT model_id
FROM warehouse
);
但是兩個表都有超過 10 億行,即使我使用的是 Spark SQL,查詢也很慢
SELECT
a.model_id
,a.car_name
,CASE WHEN b.model_id IS NOT NULL THEN TRUE ELSE FALSE END is_available
FROM
showroom a
LEFT OUTER JOIN warehouse b ON (a.model_id = b.model_id)
在大表上,連接比 IN 子句快
看看你能不能#t減少這個數字
對於陳列室,您可以在 (model_id,is_available) 上使用組合索引
當您還可以減少可能的候選人數量時
UPDATE showroom s
INNER JOIN warehouse w ON s.model_id = w.model_id
SET s.is_available = true
WHERE s.is_available = FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.