Cómo mejorar la eficiencia de las actualizaciones de tablas de big data de Oracle
Si hay una gran cantidad de datos de tabla en Oracle (nivel M o superior), la actualización de un campo es muy lenta (por ejemplo, en mi proyecto HIS, se actualizaron 16.000 registros usando CURSOR y 1 se actualizó). enviado a la vez. , 000 registros, pero tomó 4 días completar la actualización). Las mejoras que probé más tarde son las siguientes:
1. Cancelar el registro en la tabla.
2. Cancelar el índice en la tabla
Pero todavía era lento, así que encontré esto:
p = 100:11:0::: : p 11 _ QUESTION _ ID: 6407993912330
En esta sesión de preguntas y respuestas, los funcionarios de ORA propusieron una solución:
1 Generar una nueva tabla T1 creando la tabla como select xxxxx.
2. Cree el mismo índice en T1 que la tabla de destino.
3. Elimine o cambie el nombre de la tabla de destino (preste atención a la copia de seguridad para evitar arrepentimientos)
4. Cambie el nombre de T1 a la tabla de destino.
Lo probé y fue muy rápido. Mi tarea se completó en dos minutos.
Si csywdk.table_room es una tabla grande, el registro de bakfwid en noNewYWFW20081205 debe eliminarse y el ROOM_LOC de bakfwid en imp_table_room debe actualizarse a imp_table_room.room_loc:
(1) Crear una nueva tabla
p>Crear tabla tmp_new_table_room081205 como
Seleccione t1. ID de habitación, t1. NUEVAROOMID,t1. CONSTRUIDO,t1. TFH,t1. DKH,t1. Número de compilación, t1. Número de capa, t1. Número de habitación, t1. nombre_habitación,
decode(t2.bakfwid, null, t1. ubicación_habitación, t2. ubicación_habitación)
t1. área_habitación,
t1. SOBRETIPO,t1. Nombre de capa, t1. DEVDEP,t1. Celda, t1. DELFLAG,t1. QXXZ,t1. SJSJLSH,t1. FD,t1. ID,t1. BAKFWID
Unirse a la izquierda desde csywdk.table_room t1 imp _ table _ room T2 en t 1 . , donde t3.bakfwid=t1.bakfwid)
(2) Crear una tabla de respaldo
Crear tabla Table_room081205 como
seleccionar * de csywdk.table_room p> p>
(3) Reemplazar la tabla original
Eliminar tabla sde.table_room
Crear tabla sde.table_room como
seleccionar * de tmp _ new _ table _ room 081205
En estas preguntas y respuestas, también mencioné una oración relacionada con la eficiencia de ORA PL/SQL:
Las tareas que se pueden manejar en una oración nunca deben usarse programación multioración para lograr esto.
Resulta que siempre tuve miedo de que el segmento de reversión no fuera lo suficientemente grande al ejecutar, por lo que parecía que la mejor manera era preparar el disco duro.
,