我正在做这次更新
UPDATE ROOM_DATE rd SET HOTEL_ID = (
SELECT hotel_id FROM ROOM_TYPE rt WHERE rt.ROOM_TYPE_ID = rd.room_type_id
)
WHERE room_type_id < 40000 AND hotel_id IS NULL;
有一个表ROOM_DATE,需要添加一个hotel_id。以上查询根据ROOM_TYPE表中的hotel_id更新此ID。
这很有效,但速度很慢。执行需要一个小时,所以如果有更好/更快的方式,我就会徘徊。
答案 0 :(得分:0)
您需要在联接或where-conditions中使用的列上使用索引。否则,您的数据库将执行全表扫描(这很慢)。
因此,在您的情况下,您需要索引:
ROOM_DATE.ROOM_TYPE_ID
ROOM_DATE.HOTEL_ID
ROOM_TYPE.ROOM_TYPE_ID
答案 1 :(得分:0)
所以我找到了一种方法,只需要几分钟。首先,我使用从room_type获取的额外列(hotel_id)导出表格:
export to "./roomdate_new.data" of del modified by coldel|
SELECT rd.ROOM_TYPE_ID, rd.single_day_date, rd.numavail, rd.numtaken, rd.price, rt.hotel_id
FROM ROOM_TYPE rt, ROOM_DATE rd
WHERE rt.ROOM_TYPE_ID = rd.room_type_id;
然后我再次导入表格:
load from "./roomdate_new.data" of del modified by coldel| method P (1,2,3,4,5,6) replace INTO ROOM_DATE;
set integrity for ROOM_DATE allow no access immediate checked;
但我认为这不是特别优雅。我本来希望使用普通的SQL语句或过程。