Esta documentación describe la distribución de claves en corrimiento al rojo de la siguiente manera:

Las filas se distribuyen según los valores en una columna. El nodo líder intentará colocar valores coincidentes en el mismo segmento de nodo. Si distribuye un par de tablas en las claves de unión, el nodo líder coloca las filas en los cortes de acuerdo con los valores en las columnas de unión para que los valores coincidentes de las columnas comunes se almacenen físicamente juntos.

Me preguntaba si la distribución de claves también ayuda a optimizar los filtros de igualdad. Mi intuición dice que debería, pero no se menciona en ninguna parte.

Además, vi una documentación con respecto a las claves de clasificación que dice que para seleccionar una clave de clasificación:

Busque columnas que se utilicen en filtros de rango y filtros de igualdad .

Esto me confundió ya que las claves de clasificación se mencionan explícitamente como una forma de optimizar los filtros de igualdad.

Estoy preguntando esto porque ya tengo una clave de clasificación candidata en la que haré consultas de rango. Pero también quiero tener filtros de igualdad rápidos en otra columna que es una buena clave de distribución en mi caso.

0
ishan3243 14 nov. 2017 a las 17:28

2 respuestas

La mejor respuesta

Es una muy mala idea filtrar por una clave de distribución, especialmente si su tabla / clúster es grande.

La razón es que el filtro puede estar ejecutándose en un solo segmento, de hecho ejecutándose sin el beneficio de MPP.

Por ejemplo, si tiene una clave de distribución de "added_date", puede encontrar que todas las fechas añadidas de la semana anterior están todas juntas en un segmento.

Luego, la mayoría de las consultas se filtrarán por rangos recientes de added_date, y estas consultas se concentrarán y saturarán ese segmento.

1
Jon Scott 14 nov. 2017 a las 16:01

La regla simple es:

  • Utilice DISTKEY para la columna que se une con más frecuencia
  • Utilice SORTKEY para los campos que se utilizan con más frecuencia en una instrucción WHERE

De hecho, existen ventajas al utilizar el mismo campo para SORTKEY y DISTKEY. De Elija la mejor clave de clasificación :

Si se une con frecuencia a una tabla, especifique la columna de combinación como clave de clasificación y clave de distribución.

Esto permite que el optimizador de consultas elija una combinación de combinación de ordenación en lugar de una combinación de hash más lenta. Dado que los datos ya están ordenados en la clave de combinación, el optimizador de consultas puede omitir la fase de clasificación de la combinación de combinación de clasificación.

Siéntase libre de hacer algunas pruebas de rendimiento: cree algunas versiones diferentes de la tabla y use INSERT o SELECT INTO para completarlas. Luego, pruebe las consultas comunes para ver cómo funcionan.

1
John Rotenstein 14 nov. 2017 a las 23:18