actualización:¿Cuál es la mejor opción en delete-insert vs if-update else-insert?
Mi mal ... tengo una clave principal en esos tables..I significaba no más lejos de indexación actualmente en las tablas . Puede que lo tengamos en el futuro después de ver el rendimiento y, dado que tenemos demasiados filtros en los datos en recuperando datos, no mostró mucha mejoría en la indexación la última vez que ejecutamos la base de datos .
Tengo 4 mesas grandes en millones de registros. Ahora hay un procedimiento almacenado que se llama con frecuencia y actualiza estas tablas. Aquí está el escenario:
Ahora, si la entrada existe para hoy, necesito actualizarla hoy y, si la entrada no está para el usuario, debo continuar e insertar una entrada para el usuario. Ahora bien, hay dos maneras de ir sobre la realización de éstos, ya que hay un solo proc que hace esto -
primera forma -
IF EXISTS(TABLE1)
--UPDATE where condn
ELSE
--INSERT
IF EXISTS(TABLE2)
--UPDATE where condn
ELSE
--INSERT
IF EXISTS(TABLE3)
--UPDATE where condn
ELSE
--INSERT
IF EXISTS(TABLE4)
--UPDATE where condn
ELSE
--INSERT
segunda manera -
DELETE from TABLE1 where condn
DELETE from TABLE2 where condn
DELETE from TABLE3 where condn
DELETE from TABLE4 where condn
INSERT TABLE1 ENTRY
INSERT TABLE2 ENTRY
INSERT TABLE3 ENTRY
INSERT TABLE4 ENTRY
ahora la segunda manera miradas más simple, pero podría llevar más tiempo ... No estoy seguro de qué manera es la mejor aquí. ¿Alguien puede por favor ayudarme o guiarme aquí ... gracias!
Como MERGE no está disponible en SQL2005 (por ejemplo para aquellos que lo comentaron), preferiría la primera manera. El peor escenario posible para una segunda forma podría ser que tiene una identidad como un índice agrupado, lo que da como resultado al menos dos operaciones de escritura para cada cambio. –
OP dice: 'No hay indexación actualmente en las tablas. Podríamos tenerlo en el futuro "y' 4 tablas enormes sobre millones de registros'. Tenga en cuenta que una clave principal le da un índice. Si no tiene PK, entonces yo digo: ** ¡el futuro es ahora! ** en nombre del rendimiento ¡POR FAVOR agregue un índice que le ayude a su 'condición de lugar '! –
¡He actualizado mi pregunta! – Vishal