ORDEN POR CLÁUSULA 

El ORDER BY cláusula contiene una lista de expresiones, cada una de las cuales puede atribuirse con DESC (descendente) o ASC modificador (ascendente) que determina la dirección de clasificación. Si no se especifica la dirección, ASC se supone, por lo que generalmente se omite. La dirección de ordenación se aplica a una sola expresión, no a toda la lista. Ejemplo: ORDER BY Visits DESC, SearchPhrase

Las filas que tienen valores idénticos para la lista de expresiones de clasificación se generan en un orden arbitrario, que también puede ser no determinista (diferente cada vez).
Si se omite la cláusula ORDER BY, el orden de las filas tampoco está definido, y también puede ser no determinista.

Clasificación de valores especiales 

Hay dos enfoques para NaN y NULL orden de clasificación:

  • Por defecto o con el NULLS LAST modificador: primero los valores, luego NaN, entonces NULL.
  • Con el NULLS FIRST modificador: primero NULL, entonces NaN, luego otros valores.

Ejemplo 

Para la mesa

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │    2 │
│ 1 │  nan │
│ 2 │    2 │
│ 3 │    4 │
│ 5 │    6 │
│ 6 │  nan │
│ 7 │ ᴺᵁᴸᴸ │
│ 6 │    7 │
│ 8 │    9 │
└───┴──────┘

Ejecute la consulta SELECT * FROM t_null_nan ORDER BY y NULLS FIRST conseguir:

┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 7 │ ᴺᵁᴸᴸ │
│ 1 │  nan │
│ 6 │  nan │
│ 2 │    2 │
│ 2 │    2 │
│ 3 │    4 │
│ 5 │    6 │
│ 6 │    7 │
│ 8 │    9 │
└───┴──────┘

Cuando se ordenan los números de coma flotante, los NaN están separados de los otros valores. Independientemente del orden de clasificación, los NaN vienen al final. En otras palabras, para la clasificación ascendente se colocan como si fueran más grandes que todos los demás números, mientras que para la clasificación descendente se colocan como si fueran más pequeños que el resto.

Soporte de colación 

Para ordenar por valores de cadena, puede especificar la intercalación (comparación). Ejemplo: ORDER BY SearchPhrase COLLATE 'tr' - para ordenar por palabra clave en orden ascendente, utilizando el alfabeto turco, insensible a mayúsculas y minúsculas, suponiendo que las cadenas están codificadas en UTF-8. COLLATE se puede especificar o no para cada expresión en ORDER BY de forma independiente. Si se especifica ASC o DESC, se especifica COLLATE después de él. Cuando se usa COLLATE, la clasificación siempre distingue entre mayúsculas y minúsculas.

Solo recomendamos usar COLLATE para la clasificación final de un pequeño número de filas, ya que la clasificación con COLLATE es menos eficiente que la clasificación normal por bytes.

Detalles de implementación 

Menos RAM se utiliza si un pequeño suficiente LIMIT se especifica además ORDER BY. De lo contrario, la cantidad de memoria gastada es proporcional al volumen de datos para clasificar. Para el procesamiento de consultas distribuidas, si GROUP BY se omite, la clasificación se realiza parcialmente en servidores remotos y los resultados se fusionan en el servidor solicitante. Esto significa que para la ordenación distribuida, el volumen de datos a ordenar puede ser mayor que la cantidad de memoria en un único servidor.

Si no hay suficiente RAM, es posible realizar la clasificación en la memoria externa (creando archivos temporales en un disco). Utilice el ajuste max_bytes_before_external_sort para este propósito. Si se establece en 0 (el valor predeterminado), la ordenación externa está deshabilitada. Si está habilitada, cuando el volumen de datos a ordenar alcanza el número especificado de bytes, los datos recopilados se ordenan y se vuelcan en un archivo temporal. Después de leer todos los datos, todos los archivos ordenados se fusionan y se generan los resultados. Los archivos se escriben en el /var/lib/clickhouse/tmp/ directorio en la configuración (de forma predeterminada, pero puede usar el tmp_path parámetro para cambiar esta configuración).

La ejecución de una consulta puede usar más memoria que max_bytes_before_external_sort. Por este motivo, esta configuración debe tener un valor significativamente menor que max_memory_usage. Como ejemplo, si su servidor tiene 128 GB de RAM y necesita ejecutar una sola consulta, establezca max_memory_usage de hasta 100 GB, y max_bytes_before_external_sort para 80 GB.

La clasificación externa funciona con mucha menos eficacia que la clasificación en RAM.

Clasificación: 5 - 1 voto

¿Este contenido fue útil?
★★★★★