Comparar intercalaciones de SQL para intercalaciones de Windows

Resumen

En Microsoft SQL Server 2000 y en Microsoft SQL Server 2005, una "intercalación" especifica cómo se comparan y se ordenan cadenas y qué carácter se utiliza el conjunto de datos no Unicode. SQL Server 2000 admite dos tipos de intercalaciones:
  • Intercalaciones de SQL
  • Intercalaciones de Windows
Para obtener una descripción de cada tipo de intercalación y una buena descripción de cómo decidir qué intercalación a usar, vea el tema "Seleccionar intercalaciones" en los libros en pantalla de SQL Server 2000 o consulte el tema "Tipos de intercalación" en libros en pantalla de SQL Server 2005.

Este artículo analiza las consideraciones adicionales que pueden afectar a su decisión sobre si debe elegir una intercalación de Windows o una intercalación de SQL al instalar SQL Server 2000 o SQL Server 2005.

Más información

Semántica de intercalación

Una intercalación de Windows, una comparación de datos no Unicode se implementa utilizando el mismo algoritmo como datos Unicode. Unicode y no Unicode ordenación son compatibles con las reglas de comparación de cadena en una versión concreta de Windows. Esto proporciona coherencia entre tipos de datos de SQL Server. También permite a los desarrolladores que utilizan la función de API Win32 CompareString para ordenar cadenas en su aplicación utilizando las mismas reglas que utiliza SQL Server.

En una intercalación de SQL, SQL Server define la semántica de comparación diferente para datos no Unicode. SQL Server se basa esta semántica de comparación en un SQL "orden". Para una asignación de criterios de ordenación para las intercalaciones de SQL, vea el tema "Nombre de intercalación SQL" en los libros en pantalla de SQL Server.

Las reglas de una intercalación de SQL para ordenar los datos no Unicode no son compatibles con cualquier rutina de ordenación proporcionado por el sistema operativo de Microsoft Windows; Sin embargo, la ordenación de datos Unicode es compatible con una versión determinada de las ventanas de las reglas de ordenación. Porque las reglas de comparación de datos de Unicode y no Unicode son diferentes, al utilizar una intercalación de SQL podría obtener resultados diferentes para las comparaciones de los mismos caracteres, dependiendo del tipo de datos subyacente. Por ejemplo, si utiliza la intercalación SQL "SQL_Latin1_General_CP1_CI_AS", la cadena no Unicode '-c' es menor que la cadena 'ab' porque el guión ("-") se ordena como un carácter independiente que precede a "b". No obstante, si convierte estas cadenas en Unicode y realizar la misma comparación, Unicode string n c' se considera mayor que N'ab' porque la ordenación Unicode reglas usan "ordenación por palabra" que omite el guión.

Rendimiento de comparación de cadenas

Las reglas de ordenación Unicode son mucho más complejas que las reglas para un criterio de ordenación de SQL que no son de Unicode. Cuando SQL Server compara los datos Unicode, los caracteres se asignan un peso se modifica dinámicamente basándose en la configuración regional de la intercalación. Los datos también se modifican por comparación configuración de estilo como el ancho, énfasis o sensibilidad de Kana. Las rutinas de ordenación Unicode admiten más inteligentes comportamientos de ordenación como ordenación de word.

Además, dado que las rutinas deben controlar datos Unicode, son lo suficientemente flexibles para controlar la ordenación y la comparación de varios miles distintos de caracteres, en lugar de los 255 caracteres máximo que puede controlar la mayoría de los pedidos de ordenación de SQL Server. Por estos motivos, trabajo de comparación de cadena sin formato que utiliza las reglas de ordenación Unicode es generalmente más costoso en términos de tiempo y ciclos de CPU que una comparación de cadena similar que utiliza un orden no Unicode SQL.

Lo que esto significa para las posibles combinaciones de tipos de datos y tipos de intercalación en SQL Server:
  • Si se almacena y controla los datos utilizando tipos de datos no Unicode (char, varchar, texto), y utiliza una intercalación de SQL, las comparaciones de cadenas se realizará con un criterio de ordenación de SQL que no son de Unicode.
  • Si se almacena y controla los datos utilizando tipos de datos no Unicode (char, varchar, texto), y utiliza una intercalación de Windows, las comparaciones de cadenas se realizará con las reglas de ordenación Unicode. Esto puede provocar que determinadas operaciones inusualmente dependientes de la cadena de ordenación rendimiento a tardar más y más CPU de una operación similar a la que se realiza con una intercalación de SQL.
  • Si utiliza tipos de datos Unicode (nchar, nvarchar, ntext), no hay ninguna diferencia en el comportamiento de ordenación para el SQL y las intercalaciones de Windows. Ambos utilizan las reglas de ordenación de Unicode.
Por lo general, el grado de diferencia de rendimiento entre Windows y las intercalaciones de SQL no será significativo. La diferencia sólo aparece si una carga de trabajo está limitado en CPU en lugar de que se restringe por i/OS o por la velocidad de la red y la mayoría de esta carga de CPU es causada por la sobrecarga de manipulación de cadenas o las comparaciones realizadas en SQL Server. Un ejemplo de una aplicación donde podría ser pronunciada la diferencia de rendimiento es un sistema donde una aplicación pasa un valor de cadena larga a un procedimiento de SQL Server que almacena. El procedimiento almacenado, a continuación, analiza la cadena a través de un uso extensivo de funciones de manipulación de cadena de Transact-SQL como CHARINDEX o PATINDEX. Si la carga de trabajo es bastante unidimensional y está dominado por las ejecuciones de este procedimiento almacenado de análisis de cadenas, la diferencia de rendimiento entre una intercalación de SQL y una intercalación de Windows puede ser evidente. Sin embargo, el diseño de la mayoría de las aplicaciones no da lugar a una situación donde la diferencia de performance es importante.

Recomendaciones

  1. Intercalaciones de SQL se proporcionan por compatibilidad con versiones anteriores de SQL Server. Intercalaciones de Windows proporcionan las comparaciones de cadena coherente de Unicode y no Unicode de texto en SQL Server que son también coherentes con las comparaciones de cadenas en el sistema operativo Windows. Por todas estas razones, las intercalaciones de Windows se prefieren a menos que haya problemas de compatibilidad con versiones anteriores o problemas de rendimiento específicos que requieren una intercalación de SQL.
  2. Si está pensando en una intercalación de SQL basándose sólo en las características de rendimiento de una intercalación de SQL, conseguir que el rendimiento de la mayoría de las aplicaciones no se beneficia considerablemente de un cambio en la intercalación. Asegúrese de que haya aislado las consultas que muestran un beneficio de una intercalación de SQL. Tan pronto como identificar las consultas afectadas, considere las siguientes alternativas a un cambio en la intercalación. Dos de estas alternativas pueden proporcionar ventajas de rendimiento que es mayor que lo que verá si cambia la intercalación de la instancia a una intercalación de SQL:
    1. Si la sobrecarga de las intercalaciones de Windows se remonta a rutinas de Transact-SQL que realizan análisis o manipulación de cadena explícitos y, si se utilizan tipos de datos no Unicode, es aconsejable especificar una intercalación de SQL o una intercalación de Windows binaria para la operación que se ejecuta con frecuencia y que es más caro. Suponga que utiliza la función PATINDEX para determinar si una columna de texto en una tabla que contiene el carácter "x". Si fuerza una intercalación de SQL para esa operación de comparación determinada y seguirán utilizando una intercalación de Windows para el resto de la base de datos y la aplicación, no es necesario cambiar la intercalación para todo el sistema:
      SELECT PATINDEX ('%x%', MemoFld COLLATE SQL_Latin1_General_Cp1_CI_AS) FROM ...
    2. Si se realiza el seguimiento de la sobrecarga de las intercalaciones de Windows a otras más triviales consultas que no utilizan funciones de manipulación de cadena compleja, índice mejorado o consulta diseños pueden proporcionar mejoras que los enano vería cambiando a una intercalación de SQL. Una consulta que se puede satisfacer por muy selectiva busca en los índices apropiados no será sensibles a pequeños cambios en el costo de comparación de cadena. Por el contrario, una pequeña cantidad de sobrecarga por comparación de cadenas puede sumar rápidamente en una consulta que se debe realizar un recorrido de tabla y comparar un valor determinado a cada uno de millones de filas. Si prevenir la tabla grande o índice explora desde el plan de consulta cambiando la indización o la propia consulta, la consulta llevará a cabo con mayor rapidez que lo haría si cambia a una intercalación de SQL.
Nota: Hay un tercer tipo de intercalación que es una variación de una intercalación de SQL. Esta tercera intercalación se conoce como una "intercalación de compatibilidad" o "intercalación obsoletas". Una intercalación de compatibilidad es un conjunto de reglas de ordenación y comparación que no tiene un nombre de intercalación predefinidos en SQL Server 2000. Por ejemplo, si debe configurar SQL Server 7.0 con una configuración de distinción incoherentes para Unicode y para datos no Unicode, tendrá una intercalación de compatibilidad al actualizar esta instancia de SQL Server 7.0 a SQL Server 2000. En la discusión anteriormente en este artículo, la información acerca de intercalaciones de SQL también se aplica a las intercalaciones de compatibilidad.

Para obtener más información acerca de intercalaciones de compatibilidad, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

270042 INF: intercalaciones de compatibilidad descripción de SQL Server

Propiedades

Id. de artículo: 322112 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios