White Converse Light Camo Unisex Converse Crimson Crimson Surplus Oxford Green wFZqxR4B

SE APLICA A: SQL Server Azure SQL Database Azure SQL Data Warehouse Almacenamiento de datos paralelos APPLIES TO: SQL Server Azure SQL Database Azure SQL Data Warehouse Parallel Data Warehouse

SQL ServerSQL Server realiza operaciones de ordenación, intersección, unión y diferencia mediante una tecnología de ordenación en memoria y combinación hash. performs sort, intersect, union, and difference operations using in-memory sorting and hash join technology. Con este tipo de plan de consulta, SQL ServerSQL Server acepta la partición vertical de tablas, a veces llamada almacenamiento en columnas.Using this type of query plan, SQL ServerSQL Server supports vertical table partitioning, sometimes called columnar storage.

SQL ServerSQL Server emplea tres tipos de operaciones de combinación: employs three types of join operations:

  • Combinaciones de bucles anidadosNested Loops joins
  • Combinaciones de mezclaMerge joins
  • Combinaciones hashHash joins

Aspectos básicos de las combinacionesJoin Fundamentals

Las combinaciones permiten recuperar datos de dos o más tablas según las relaciones lógicas entre ellas.By using joins, you can retrieve data from two or more tables based on logical relationships between the tables. Las combinaciones indican cómo debe usar Microsoft SQL Server los datos de una tabla para seleccionar las filas de otra tabla.Joins indicate how Microsoft SQL Server should use data from one table to select the rows in another table.

Una condición de combinación define la forma en la que dos tablas se relacionan en una consulta al:A join condition defines the way two tables are related in a query by:

  • Especificar la columna de cada tabla que debe usarse para la combinación.Specifying the column from each table to be used for the join. Una condición de combinación típica especifica una clave externa de una tabla y su clave asociada en otra tabla.A typical join condition specifies a foreign key from one table and its associated key in the other table.
  • Oxford Unisex Converse Green Surplus Camo White Light Crimson Converse Crimson Especificar un operador lógico (por ejemplo, = o <>) para usarlo en los valores de comparación de las columnas.Specifying a logical operator (for example, = or <>,) to be used in comparing values from the columns.

Las combinaciones internas se pueden especificar en las cláusulas FROM o WHERE.Inner joins can be specified in either the FROM or WHERE clauses. Las combinaciones externas solo se pueden especificar en la cláusula FROM.Outer joins can be specified in the FROM clause only. Las condiciones de combinación se combinan con las condiciones de búsqueda de WHERE y Camo Light Converse Crimson Oxford Converse Green Unisex White Crimson Surplus HAVING para controlar cuáles son las filas seleccionadas de las tablas base a las que se hace referencia en la cláusula FROM.The join conditions combine with the WHERE and HAVING search conditions to control the rows that are selected from the base tables referenced in the FROM clause.

Especificar las condiciones de la combinación en la cláusula FROM ayuda a separarlas de cualquier otra condición de búsqueda que se pueda especificar en una cláusula WHERE; es el método recomendado para especificar combinaciones.Specifying the join conditions in the FROM clause helps separate them from any other search conditions that may be specified in a WHERE clause, and is the recommended method for specifying joins. La sintaxis simplificada de la combinación de la cláusula FROM de ISO es:A simplified ISO FROM clause join syntax is:

FROM first_table join_type second_table [ON (join_condition)]

join_type especifica qué tipo de combinación se lleva a cabo: interior, exterior o cruzada.join_type specifies what kind of join is performed: an inner, outer, or cross join. join_condition define el predicado que se va a evaluar para cada par de filas combinadas.join_condition defines the predicate to be evaluated for each pair of joined rows. A continuación se muestra un ejemplo de la especificación de una combinación en la cláusula FROM:The following is an example of a FROM clause join specification:

SQL
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
     ON (ProductVendor.BusinessEntityID = Vendor.BusinessEntityID)

A continuación se incluye un ejemplo de una instrucción SELECT sencilla con esta combinación:The following is a simple SELECT statement using this join:

SQL
SELECT ProductID, Purchasing.Vendor.BusinessEntityID, Name
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
    ON (Purchasing.ProductVendor.BusinessEntityID = Purchasing.Vendor.BusinessEntityID)
Light Surplus Camo Crimson Converse Green Crimson White Converse Oxford Unisex WHERE StandardPrice > $10
  AND Oxford Camo White Converse Unisex Green Light Crimson Crimson Surplus Converse Name LIKE N'F%'
GO

La selección devuelve la información de los productos y proveedores de cualquier combinación de partes suministrada por una empresa cuyo nombre empieza por la letra F y el precio del producto es superior a 10 $.The select returns the product and supplier information for any combination of parts supplied by a company for which the company name starts with the letter F and the price of the product is more than $10.

Cuando en una consulta simple se hace referencia a varias tablas, ninguna de las referencias a las columnas debe ser ambigua.When multiple tables are referenced in a single query, all column references must be unambiguous. En el ejemplo anterior, las tablas ProductVendor y Vendor tienen una columna denominada BusinessEntityID.In the previous example, both the ProductVendor and Vendor table have a column named BusinessEntityID. Cualquier nombre de columna que esté duplicado en varias tablas a las que se hace referencia en la consulta debe ser calificado con el nombre de la tabla.Any column name that is duplicated between two or more tables referenced in the query must be qualified with the table name. Todas las referencias a las columnas de Vendor del ejemplo están calificadas.All references to the Vendor columns in the example are qualified.

Cuando el nombre de una columna no está duplicado en varias de las tablas usadas en la consulta, las referencias al mismo no tienen que calificarse con el nombre de la tabla.When a column name is not duplicated in two or more tables used in the query, references to it do not have to be qualified with the table name. Esto se muestra en el ejemplo anterior.This is shown in the previous example. Algunas veces, resulta difícil entender una instrucción SELECT porque no hay nada que indique la tabla que ha suministrado cada columna.Such a SELECT statement is sometimes difficult to understand because there is nothing to indicate the table that provided each column. La legibilidad de la consulta puede mejorarse si todas las columnas se califican con sus nombres de tabla.The readability of the query is improved if all columns are qualified with their table names. Incluso puede mejorarse más si se usan alias de tablas, especialmente cuando los propios nombres de las tablas se deben calificar con los nombres de las bases de datos y de los propietarios.The readability is further improved if table aliases are used, especially when the table names themselves must be qualified with the database and owner names. Camo Crimson White Converse Crimson Oxford Converse Green Unisex Light Surplus A continuación se incluye el mismo ejemplo, con la salvedad de que se han asignado alias de tablas y las columnas se han calificado con dichos alias para facilitar su lectura:The following is the same example, except that table aliases have been assigned and the columns qualified with table aliases to improve readability:

SQL
SELECT pv.ProductID, v.BusinessEntityID, v.Name
FROM Purchasing.ProductVendor AS pv 
JOIN Purchasing.Vendor AS v
    ON (pv.BusinessEntityID = v.BusinessEntityID)
WHERE StandardPrice > $10
    AND Name LIKE N'F%';

Los ejemplos anteriores han especificado las condiciones de combinación en la cláusula FROM, lo que constituye el método recomendado.The previous examples specified the join conditions in the FROM clause, which is the preferred method. La siguiente consulta contiene la misma condición de combinación especificada en la cláusula WHERE:The following query contains the same join condition specified in the WHERE clause:

SQL
SELECT pv.ProductID, v.BusinessEntityID, v.Name
FROM Purchasing.ProductVendor AS pv, Purchasing.Vendor AS v
WHERE pv.BusinessEntityID=v.BusinessEntityID
    AND StandardPrice > $10
    AND Name LIKE N'F%';

La lista de selección de una combinación puede hacer referencia a todas las columnas de las tablas combinadas o a cualquier subconjunto de las columnas.The select list for a join can reference all the columns in the joined tables, or any subset of the columns. No es necesario que la lista de selección contenga columnas de cada tabla de la combinación.The select list is not required to contain columns from every table in the join. Por ejemplo, en una combinación de tres tablas, solo se puede usar una tabla para pasar de una de las dos tablas a la tercera y no es necesario que se haga referencia a ninguna columna de la tabla intermedia en la lista de selección.For example, in a three-table join, only one table can be used to bridge from one of the other tables to the third table, and none of the columns from the middle table have to be referenced in the select list.

Aunque las condiciones de combinación suelen tener comparaciones de igualdad (=), también se pueden especificar otros operadores relacionales o de comparación, así como otros predicados.Although join conditions usually have equality comparisons (=), other comparison or relational operators can be specified, as can other predicates. Para obtener más información, vea Men’s Wide and Be Back Slipper Indoors Insole Moccasin Coffee � Worn Slip Suede Style Width Ons Foam Dearfoams Outdoors With Can Padded Microfiber Closed Memory xfd4wxCq y WHERE (Transact-SQL).For more information, see Comparison Operators (Transact-SQL) and WHERE (Transact-SQL).

Cuando SQL ServerSQL Server procesa combinaciones, el motor de consultas elige el método más eficaz entre varias posibilidades para procesar la combinación.When SQL ServerSQL Server processes joins, the query engine chooses the most efficient method (out of several possibilities) of processing the join. La ejecución física de varias combinaciones puede utilizar muchas optimizaciones diferentes y, por consiguiente. no se puede predecir de forma confiable.The physical execution of various joins can use many different optimizations and therefore cannot be reliably predicted.

Converse Converse Camo Surplus Light White Unisex Crimson Green Crimson Oxford No es necesario que las columnas utilizadas en una condición de combinación tengan el mismo nombre o sean del mismo tipo de datos.Columns used in a join condition are not required to have the same name or be the same data type. Sin embargo, si los tipos de datos no son idénticos, deben ser compatibles o bien deben ser tipos que SQL Server pueda convertir implícitamente.However, if the data types are not identical, they must be compatible, or be types that SQL Server can implicitly convert. Si los tipos de datos no se pueden convertir implícitamente, la condición de combinación debe convertir explícitamente el tipo de datos mediante la función CAST.If the data types cannot be implicitly converted, the join condition must explicitly convert the data type using the CAST function. Para obtener más información sobre la conversión de datos, vea Conversión de tipos de datos (motor de base de datos).For more information about implicit and explicit conversions, see Data Type Conversion (Database Engine).

La mayor parte de las consultas que usan una combinación se pueden volver a escribir con una subconsulta (una consulta anidada dentro de otra consulta). La mayor parte de las subconsultas se pueden volver a escribir como combinaciones.Most queries using a join can be rewritten using a subquery (a query nested within another query), and most subqueries can be rewritten as joins. Para obtener más información sobre las subconsultas, vea Subqueries (Subconsultas).For more information about subqueries, see Subqueries.

Nota

Las tablas no se pueden combinar directamente en columnas ntext, text o image.Tables cannot be joined directly on ntext, text, or image columns. Sin embargo, las tablas no se pueden combinar directamente en columnas ntext, text o image utilizando SUBSTRING.However, tables can be joined indirectly on ntext, text, or image columns by using SUBSTRING.
Por ejemplo, SELECT * FROM t1 JOIN t2 ON SUBSTRING(t1.textcolumn, 1, 20) = SUBSTRING(t2.textcolumn, 1, 20) realiza una combinación interna de dos tablas en los primeros 20 caracteres de cada columna de texto de las tablas t1 y t2.For example, SELECT * FROM t1 JOIN t2 ON SUBSTRING(t1.textcolumn, 1, 20) = SUBSTRING(t2.textcolumn, 1, 20) performs a two-table inner join on the first 20 characters of each text column in tables t1 and t2.
Además, otra posibilidad para comparar columnas ntext o text de dos tablas consiste en comparar las longitudes de las columnas con una cláusula WHERE, por ejemplo: WHERE DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)In addition, another possibility for comparing ntext or text columns from two tables is to compare the lengths of the columns with a WHERE clause, for example: WHERE DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)

Descripción de las combinaciones de bucles anidadosUnderstanding Nested Loops joins

Si la entrada de una combinación es pequeña (menor de 10 filas), y la entrada de otra combinación es bastante grande y está indizada en las columnas de combinación, una combinación de bucles anidados de índices es la operación de combinación más rápida, debido a que requieren menos E/S y menos comparaciones.If one join input is small (fewer than 10 rows) and the other join input is fairly large and indexed on its join columns, an index nested loops join is the fastest join operation because they require the least I/O and the fewest comparisons.

La combinación de bucles anidados, también denominada iteración anidada, utiliza una entrada de combinación como tabla de entrada externa (mostrada como la entrada superior en el plan de ejecución gráfico) y otra como tabla de entrada interna (inferior).The nested loops join, also called nested iteration, uses one join input as the outer input table (shown as the top input in the graphical execution plan) and one as the inner (bottom) input table. El bucle externo procesa la tabla de entrada externa fila a fila.The outer loop consumes the outer input table row by row.Aqua Shoes Dry KRIMUS Water Shoes Quick Mens Lightweight Walking Womens Blue qwU04P El bucle interno, que se ejecuta para cada fila externa, busca filas coincidentes en la tabla de entrada interna.The inner loop, executed for each outer row, searches for matching rows in the inner input table.

En el caso más sencillo, la búsqueda recorre una tabla o índice completo, lo cual recibe el nombre de combinación nativa de bucles anidados.In the simplest case, the search scans an entire table or index; this is called a naive nested loops join. Si la búsqueda utiliza un índice, se denomina combinación de bucles anidados de índice.If the search exploits an index, it is called an index nested loops join. Si se genera el índice como parte del plan de consulta (y se destruyó al finalizar la consulta), se denomina combinación de bucles anidados de índice temporal.If the index is built as part of the query plan (and destroyed upon completion of the query), it is called a temporary index nested loops join. El optimizador de consultas tiene en cuenta todas estas variantes.All these variants are considered by the Query Optimizer.

Una combinación de bucles anidados resulta particularmente eficaz si la entrada externa es pequeña y la entrada interna está indizada previamente y es grande.A nested loops join is particularly effective if the outer input is small and the inner input is preindexed and large. En muchas transacciones pequeñas, como las que afectan solo a un pequeño conjunto de filas, las combinaciones de bucles anidados de índice son superiores a las combinaciones de mezcla y a las combinaciones hash.In many small transactions, such as those affecting only a small set of rows, index nested loops joins are superior to both merge joins and hash joins. Sin embargo, en las consultas grandes, las combinaciones de bucles anidados a menudo no son la opción óptima.In large queries, however, nested loops joins are often not the optimal choice.

Comprender las combinaciones de mezclaUnderstanding Merge joins

Si las dos entradas de la combinación no son pequeñas pero están ordenadas por la columna de combinación (por ejemplo, si se obtuvieron al recorrer índices ordenados), una combinación de mezcla es la operación de combinación más rápida.If the two join inputs are not small but are sorted on their join column (for example, if they were obtained by scanning sorted indexes), a merge join is the fastest join operation. Si ambas entradas de combinación son grandes y tienen tamaños similares, una combinación de mezcla con una ordenación previa y una combinación hash ofrecen un rendimiento similar.If both join inputs are large and the two inputs are of similar sizes, a merge join with prior sorting and a hash join offer similar performance. Sin embargo, las operaciones de combinación hash a menudo son más rápidas si los tamaños de las dos entradas difieren significativamente entre sí.However, hash join operations are often much faster if the two input sizes differ significantly from each other.

La combinación de mezcla requiere que ambas entradas estén ordenadas en las columnas de mezcla, que se han definido mediante las cláusulas de igualdad (ON) del predicado de combinación.The merge join requires both inputs to be sorted on the merge columns, which are defined by the equality (ON) clauses of the join predicate. El optimizador de consultas normalmente recorre un índice, si existe uno en el conjunto de columnas apropiado, o bien coloca un operador de orden bajo la combinación de mezcla.The query optimizer typically scans an index, if one exists on the proper set of columns, or it places a sort operator below the merge join. En algunos casos, puede haber varias cláusulas de igualdad, pero las columnas de mezcla se toman solo de algunas de las cláusulas de igualdad disponibles.In rare cases, there may be multiple equality clauses, but the merge columns are taken from only some of the available equality clauses.

Dado que cada entrada está ordenada, el operador Merge Join obtendrá una fila de cada entrada y las comparará.Because each input is sorted, the Merge Join operator gets a row from each input and compares them. Por ejemplo, para operaciones de combinaciones internas, se devuelven las filas si son iguales.For example, for inner join operations, the rows are returned if they are equal. Si no son iguales, se descarta la fila que tenga el valor menor y se obtiene otra fila de esa entrada.If they are not equal, the lower-value row is discarded and another row is obtained from that input. Este proceso se repite hasta que se han procesado todas las filas.This process repeats until all rows have been processed.

La operación de combinación de mezcla puede ser una operación normal o de varios a varios.The merge join operation may be either a regular or a many-to-many operation. Una combinación de mezcla de varios a varios utiliza una tabla temporal para almacenar las filas.A many-to-many merge join uses a temporary table to store rows. Si hay valores duplicados de cada entrada, una de las entradas tendrá que retroceder al principio de los duplicados cuando se procesa cada duplicado de la otra entrada.If there are duplicate values from each input, one of the inputs will have to rewind to the start of the duplicates as each duplicate from the other input is processed.

Si hay un predicado residual, todas las filas que cumplan el predicado de mezcla evaluarán el predicado residual y solo se devolverán las filas que lo cumplan.If a residual predicate is present, all rows that satisfy the merge predicate evaluate the residual predicate, and only those rows that satisfy it are returned.

La combinación de mezcla es muy rápida, pero puede ser una opción costosa si se requieren operaciones de ordenación.Merge join itself is very fast, but it can be an expensive choice if sort operations are required. Sin embargo, si el volumen de datos es grande y los datos deseados se pueden obtener con una ordenación previa de los índices existentes de árbol b, la combinación de mezcla es, a menudo, el algoritmo de combinación disponible más rápido.However, if the data volume is large and the desired data can be obtained presorted from existing B-tree indexes, merge join is often the fastest available join algorithm.

Descripción de las combinaciones hashUnderstanding Hash joinsL RUN Light Breathable Shoes Outdoor Blue Unisex Flat Mutifunctional Wading Heeled Casual Sports Mesh qTf6rZwq7

Las combinaciones hash pueden procesar eficazmente entradas grandes, sin ordenar y no indizadas.Hash joins can efficiently process large, unsorted, nonindexed inputs. Son útiles para obtener resultados intermedios en consultas complejas debido a que:They are useful for intermediate results in complex queries because:

  • Los resultados intermedios no están indizados (a menos que se hayan guardado explícitamente en disco y, después, se hayan indizado) y, a menudo, no tienen un orden adecuado para la siguiente operación del plan de consulta.Intermediate results are not indexed (unless explicitly saved to disk and then indexed) and often are not suitably sorted for the next operation in the query plan.
  • Los optimizadores de consultas solo calculan los tamaños de resultados intermedios.Query optimizers estimate only intermediate result sizes. Dado que las estimaciones pueden ser poco exactas en consultas complejas, los algoritmos utilizados para procesar los resultados intermedios no solo deben ser eficaces, sino que también deben rebajarse si un resultado intermedio es mayor de lo previsto.Because estimates can be very inaccurate for complex queries, algorithms to process intermediate results not only must be efficient, but also must degrade gracefully if an intermediate result turns out to be much larger than anticipated.

La combinación hash permite reducir el uso de la desnormalización.The hash join allows reductions in the use of denormalization. La desnormalización se suele utilizar para conseguir un rendimiento mejor mediante la reducción de las operaciones de combinación, a pesar del peligro de redundancia, como las actualizaciones incoherentes.Denormalization is typically used to achieve better performance by reducing join operations, in spite of the dangers of redundancy, such as inconsistent updates. Las combinaciones hash reducen la necesidad de desnormalización.Hash joins reduce the need to denormalize. Las combinaciones hash permiten que las particiones verticales (que representan grupos de columnas de una sola tabla en archivos o índices independientes) se conviertan en una opción viable para el diseño físico de bases de datos.Hash joins allow vertical partitioning (representing groups of columns from a single table in separate files or indexes) to become a viable option for physical database design.

La combinación hash tiene dos entradas: la entrada de compilación y la entrada de sondeo.The hash join has two inputs: the build input and probe input. El optimizador de consultas asigna estos roles de forma que la entrada más pequeña sea la entrada de generación.The query optimizer assigns these roles so that the smaller of the two inputs is the build input.

Las combinaciones hash se utilizan para muchos tipos de operaciones de coincidencia de conjuntos: combinación interna; combinación externa completa, izquierda y derecha; semicombinación izquierda y derecha; intersección; unión y diferencia.Hash joins are used for many types of set-matching operations: inner join; left, right, and full outer join; left and right semi-join; intersection; union; and difference. Además, una variante de la combinación hash puede realizar la eliminación duplicada y la agrupación, como SUM(salary) GROUP BY department.Moreover, a variant of the hash join can do duplicate removal and grouping, such as SUM(salary) GROUP BY department. Estas modificaciones solo utilizan una entrada para los roles de generación y sondeo.These modifications use only one input for both the build and probe roles.

En las secciones siguientes se describen los distintos tipos de combinaciones hash: combinación hash en memoria, combinación hash aplazada y combinación hash recursiva.The following sections describe different types of hash joins: in-memory hash join, grace hash join, and recursive hash join.

Combinación hash en memoriaIn-Memory Hash Join

La combinación hash primero recorre o calcula la entrada de generación completa y, a continuación, genera una tabla hash en memoria.The hash join first scans or computes the entire build input and then builds a hash table in memory. Cada fila se inserta en un cubo hash según el valor hash calculado para la clave hash.Each row is inserted into a hash bucket depending on the hash value computed for the hash key. Si la entrada de generación completa es menor que la memoria disponible, se pueden insertar todas las filas en la tabla hash.If the entire build input is smaller than the available memory, all rows can be inserted into the hash table. Después de la fase de generación se produce la fase de sondeo.This build phase is followed by the probe phase. La entrada de sondeo completa se recorre o se calcula fila a fila y, por cada fila de sondeo, se calcula el valor de la clave hash, se recorre el cubo hash correspondiente y se obtienen las coincidencias.The entire probe input is scanned or computed one row at a time, and for each probe row, the hash key's value is computed, the corresponding hash bucket is scanned, and the matches are produced.

Combinación hash aplazadaGrace Hash Join

Surplus Light Crimson Oxford Camo Green Converse White Converse Unisex Crimson Si la entrada de generación no cabe en la memoria, la combinación hash se realiza en varios pasos.If the build input does not fit in memory, a hash join proceeds in several steps. Esto se denomina combinación hash aplazada.This is known as a grace hash join. Cada paso contiene una fase de generación y una fase de sondeo.Each step has a build phase and probe phase. Inicialmente, se procesan todas las entradas de generación y sondeo, y se crean particiones (con una función hash sobre las claves hash) en varios archivos.Initially, the entire build and probe inputs are consumed and partitioned (using a hash function on the hash keys) into multiple files. La utilización de la función hash sobre las claves hash garantiza que todos los pares de registros combinados estén en la misma pareja de archivos.Using the hash function on the hash keys guarantees that any two joining records must be in the same pair of files. Por tanto, la tarea de combinar dos grandes entradas se ha reducido a varias instancias más pequeñas de las mismas tareas.Therefore, the task of joining two large inputs has been reduced to multiple, but smaller, instances of the same tasks. A continuación se aplica la combinación hash a cada pareja de archivos de la partición.The hash join is then applied to each pair of partitioned files.

Combinación hash recursivaRecursive Hash Join

Si la entrada de generación es tan grande que las entradas para una mezcla externa estándar requerirían varios niveles de mezcla, son necesarios varios pasos de particiones y varios niveles de particiones.If the build input is so large that inputs for a standard external merge would require multiple merge levels, multiple partitioning steps and multiple partitioning levels are required. Si solo algunas de las particiones son grandes, los pasos de particiones adicionales solo se utilizan para estas particiones específicas.If only some of the partitions are large, additional partitioning steps are used for only those specific partitions. Para que todos los pasos de las particiones sean lo más rápidos posible, se utilizan grandes operaciones asincrónicas de E/S de forma que un solo subproceso pueda mantener ocupadas varias unidades de disco.In order to make all partitioning steps as fast as possible, large, asynchronous I/O operations are used so that a single thread can keep multiple disk drives busy.

Nota

Si la entrada de generación solo es un poco más grande que la memoria disponible, se combinan elementos de una combinación hash en memoria y una combinación hash aplazada en un solo paso, para producir una combinación hash híbrida.If the build input is only slightly larger than the available memory, elements of in-memory hash join and grace hash join are combined in a single step, producing a hybrid hash join.

Durante la optimización, no siempre se puede determinar qué combinación hash se utiliza.It is not always possible during optimization to determine which hash join is used. Por tanto, SQL Server comienza utilizando una combinación hash en memoria y, gradualmente, pasa a una combinación hash aplazada y a una combinación hash recursiva, según el tamaño de la entrada de generación.Therefore, SQL Server starts by using an in-memory hash join and gradually transitions to grace hash join, and recursive hash join, depending on the size of the build input.

Green Crimson White Converse Converse Light Crimson Camo Unisex Oxford Surplus Si el optimizador de consultas prevé erróneamente cuál de las dos entradas será más pequeña y, por tanto, debería haber sido la entrada de generación, se invierten dinámicamente los roles de generación y sondeo.If the Query Optimizer anticipates wrongly which of the two inputs is smaller and, therefore, should have been the build input, the build and probe roles are reversed dynamically. La combinación hash se asegura de usar el archivo de desbordamiento menor como entrada de generación.The hash join makes sure that it uses the smaller overflow file as build input. Esta técnica se denomina “inversión de roles”.This technique is called role reversal. La inversión de roles tiene lugar en una combinación hash después de al menos un volcado en el disco.Role reversal occurs inside the hash join after at least one spill to the disk.

Nota

La inversión de roles funciona independientemente de cualquier estructura o sugerencia de consulta.Role reversal occurs independent of any query hints or structure. La inversión de roles no se muestra en el plan de consulta; cuando se lleva a cabo, resulta transparente para el usuario.Role reversal does not display in your query plan; when it occurs, it is transparent to the user.

Salida hashHash Bailout

El término salida hash algunas veces se utiliza para describir combinaciones hash aplazadas o recursivas.The term hash bailout is sometimes used to describe grace hash joins or recursive hash joins.

Nota

Las combinaciones hash recursivas o las salidas hash reducen el rendimiento del servidor.Recursive hash joins or hash bailouts cause reduced performance in your server. Si ve muchos eventos Hash Warning en un seguimiento, actualice las estadísticas en las columnas que se están combinando.If you see many Hash Warning events in a trace, update statistics on the columns that are being joined.

Para obtener más información sobre el salida hash, vea Hash Warning [clase de eventos].For more information about hash bailout, see Hash Warning Event Class.

Combinaciones y valores NULLNull Values and Joins

Cuando hay valores NULL en las columnas de las tablas que se están combinando, los valores NULL no coinciden unos con otros.When there are null values in the columns of the tables being joined, the null values do not match each other. La presencia de valores NULL en una columna de una de las tablas que se está combinando solo se puede indicar si se usa una combinación externa (a menos que la cláusula WHERE excluya los valores NULL).The presence of null values in a column from one of the tables being joined can be returned only by using an outer join (unless the WHERE clause excludes null values).

A continuación se muestran dos tablas que tienen, cada una, un valor NULL en la columna que participa en la combinación:Here are two tables that each have NULL in the column that will participate in the join:

table1                          table2
a           b                   c            d
-------     ------              -------      ------
      1        one                 NULL         two
   NULL      three                    4        four
      4      join4

Una combinación que compara los valores de la columna con los de la columna c no obtiene una coincidencia en las columnas que tienen valores NULL:A join that compares the values in column a against column c does not get a match on the columns that have values of NULL:

SQL
SELECT *
FROM table1 t1 JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a;
GO

Solo se devuelve una fila con el valor 4 en las columnas a y c:Only one row with 4 in column a and c is returned:

Light Green White Camo Converse Crimson Surplus Converse Oxford Unisex Crimson
a           b      c           d      
----------- ------ ----------- ------ 
4           join4  4           four   

(1 row(s) affected)

Los valores NULL devueltos de una tabla base también son difíciles de distinguir de los valores NULL devueltos en una combinación externa.Null values returned from a base table are also difficult to distinguish from the null values returned from an outer join. Por ejemplo, la siguiente instrucción SELECT realiza una combinación externa izquierda en las dos tablas:For example, the following SELECT statement does a left outer join on these two tables:

SQL
SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a;
GO

Light Oxford Converse Camo Surplus Crimson White Green Unisex Converse Crimson El conjunto de resultados es el siguiente.Here is the result set.

a           b      c           d      
----------- ------ ----------- ------ 
NULL        three  NULL        NULL 
1           one    NULL        NULL 
4           join4  4           four   

(3 row(s) affected)

Los resultados no facilitan la distinción de NULL en los datos de NULL que representen la imposibilidad de combinar.The results do not make it easy to distinguish a NULL in the data from a NULL that represents a failure to join. Cuando haya valores NULL en los datos que se estén combinando, normalmente será preferible omitirlos de los resultados al utilizar una combinación normal.When null values are present in data being joined, it is usually preferable to omit them from the results by using a regular join.

Ver tambiénSee AlsoWomen Beach Flip Summer Sandals Summer Shoes Bohemia Beige Flat Flops Inkach Thong Sandals fwqTEEpY

Referencia de operadores lógicos y físicos del plan de presentación Showplan Logical and Physical Operators Reference
Men’s Wide and Be Back Slipper Indoors Insole Moccasin Coffee � Worn Slip Suede Style Width Ons Foam Dearfoams Outdoors With Can Padded Microfiber Closed Memory xfd4wxCq Comparison Operators (Transact-SQL)
Conversión de tipo de datos (motor de base de datos) Data Type Conversion (Database Engine)
Subqueries (Subconsultas)Subqueries
Combinaciones adaptablesAdaptive Joins