2009-11-06 7 views
9

Después de haber leído este enlace en RBAR y this, mi comprensión de RBAR reduce a lo siguiente:RBAR vs programación basada Conjunto para SQL

  1. Cualquier cosa que tiene bucles y cursores
  2. Cualquier cosa que no esté ajustado basa

Sé que esto suena un poco totalmente por lo que estoy preguntando si alguien tiene una explicación más elegante en cuanto a qué programación basada en conjuntos es (dentro del contexto SQL).

Respuesta

13

La programación basada en conjuntos se basa en el concepto matemático de un conjunto, y tiene operadores que trabajan en un conjunto completo a la vez. La programación procedural (RBAR) se basa más en los conceptos informáticos tradicionales de archivos y registros. Así que para aumentar el salario de todos los empleados en el departamento de X en un 10%:

Conjunto basada en:

UPDATE employees SET salary = salary * 1.10 WHERE department = 'X'; 

Procedimiento (ejemplo extremo, pseudo-código):

OPEN cursor FOR SELECT * FROM employees; 
LOOP 
    FETCH cursor INTO record; 
    EXIT WHEN (no more records to fetch); 
    IF record.department = 'X' THEN 
     UPDATE employees 
     SET salary = salary * 1.10 
     WHERE employee_id = record.employee_id; 
    END IF 
END LOOP 
CLOSE cursor; 

En el procedimiento versión, solo una fila de empleados se actualiza a la vez; en la versión basada en conjunto, todas las filas en el "conjunto de empleados en el departamento X" se actualizan de inmediato (en lo que a nosotros respecta).

No estoy seguro de que esto agregue algo a lo que ya habrá leído en sus enlaces, ¡pero pensé que podría probarlo!

+0

Por supuesto, la versión basada en conjuntos es casi siempre más rápida y generalmente por mucho. – HLGEM

6

Señalaré que el procesamiento basado en conjuntos puede implicar bucles. Si desea procesar en lotes en lugar de atar varias tablas mientras carga un millón de registros en un proceso basado en conjuntos, puede recorrer lotes de registros, esto es más rápido que un cursor que opera una fila a la vez y puede ser mucho mejor para su base de datos que hacer una declaración de inserción gigante.

Algunos procesos RBAR tampoco se ven como cursores o bucles. Estos incluirían subconsultas correlacionadas y muchas funciones definidas por el usuario.

+1

De acuerdo y bien establecido. –

Cuestiones relacionadas