2009-10-20 16 views

Respuesta

11

Las tablas temporales son como las tablas ordinarias en la mayoría de las características, excepto que entran en TempDB en lugar de la base de datos actual, y desaparecen después del alcance limitado (dependiendo de si son tablas TEM basadas en sesiones o globales). en las tablas Temp está registrado en el registro de transacciones, con todas las implicaciones de rendimiento que esto conlleva. otoh, también puede agregar tantos índices o vistas, o desencadenantes, o lo que sea que desee a una tabla temporal exactamente como lo haría con una tabla ordinaria Tabla

Las variables de tabla son un tipo de tabla corta en memoria (también usan temp DB). Los cambios en ellas no se registran (esto mejora el rendimiento) .Pero solo puede obtener un índice sobre ellas, (porque los índices no se pueden crear después de la declaración inicial esultados, el único índice que puede crear en una variable de tabla es la que se puede incluir en la tabla de declaración de variables inicial ...

Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20)) 

Debido a estas características, tablas temporales son la mejor opción para tablas grandes, (de ancho y con muchas filas), y/o que experimentarán más de un patrón de acceso durante su vida útil, mientras que las variables de tabla son mejores cuando se necesita una tabla muy estrecha (tabla de solo claves o clave con solo una columna de datos), que siempre debe accederse mediante esa clave indexada ...

+0

El optimizador también asume que una variable de tabla siempre tiene exactamente 1 fila. – erikkallen

+2

@erikkallen, no lo sabía; por favor consulte ? –

+2

"solo puede obtener un índice sobre ellos (porque los índices no pueden crearse después de la declaración de declaración inicial"). ¿Qué ocurre cuando la declaración de declaración inicial incluye más de un constructo lógico que crea físicamente un índice, por ejemplo, contiene dos? 'UNIQUE's:' DECLARE @T TABLE (ID1 INTEGER NOT NULL UNIQUE, ID2 INTEGER NOT NULL UNIQUE); 'entonces seguramente creará dos índices, ¿no? – onedaywhen

1
  1. No hay registro de las variables de tabla
  2. variables de tabla tienen alcance solamente local (no se puede acceder a la misma variable de tabla de procedimientos diferentes)
  3. Los procedimientos con tablas temporales no se pueden compilar previamente

Para obtener más información, consulte this topic.

1
  1. Las variables de tabla tienen un alcance bien definido. Se borrarán automáticamente al final del lote (es decir, el lote actual de declaraciones) donde la tabla temporal será visible para la sesión actual y los procedimientos almacenados anidados. La tabla temporal global estará visible para todas las sesiones.

  2. Las variables de tabla se crean con la declaración Declare. No podemos crear variable de tabla using

    select * into @tableVariableName 
    

    Pero podemos crear tabla temporal utilizando create table, así como la declaración

    select * into #tempTableName 
    
  3. En SQL Server 2008 en adelante podemos pasar la variable tabla como un parámetro para los procedimientos almacenados. Pero no podemos pasar la tabla temporal como un parámetro para el procedimiento almacenado.

  4. Podemos usar la variable de tabla dentro de la UDF (función definida por el usuario) pero no podemos usar la tabla temporal dentro de la UDF.

Cuestiones relacionadas