2011-06-01 17 views
8

¿Me interesa si existe la posibilidad de especificar una intercalación para una columna cuando se crea un índice que es diferente de la intercalación de esa columna? Y cuando se indexa, ¿se ordenan los datos de cadena de acuerdo con la intercalación de la columna o la intercalación de la base de datos?Intercalaciones en índices en SQL Server

Respuesta

5

No creo que puedas. Aunque COLLATE se documenta por separado, se le nota que sólo hay 3 lugares que figuran en los que puede ocurrir:

  • crear o alterar una base de datos
  • crear o alterar una columna de tabla
  • Lanzamiento de la colación de una expresión

Tenga en cuenta que, por ejemplo, en CREATE TABLE:

<column_definition> ::= 
column_name <data_type> 
    [ FILESTREAM ] 
    [ COLLATE collation_name ] 
    ... 

que la cláusula COLLATE se menciona explícitamente.

Considerando que, en CREATE INDEX:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> (column [ ASC | DESC ] [ ,...n ]) 
    ... 

nota que todo lo que está permitido aquí es una columna - no es una definición de columna, ni una expresión.


creo que la intercalación de cada columna dentro de un índice sigue la intercalación de la columna subyacente (s) en la tabla apropiada. La intercalación de la base de datos no se utiliza para mucho, que yo sepa, aparte de proporcionar una intercalación predeterminada a las columnas durante las instrucciones CREATE/ALTER table.

6

Puede crear el campo calculado con la intercalación necesaria y crear el índice en este campo.

+1

Eso requiere doble almacenamiento ..... – Pacerier

+0

@Pacerier Si estoy leyendo los documentos correctamente, no necesita usar 'PERSISTED' para crear un índice en una columna calculada. – binki

4

Intente hacer una vista indizada y agregue la intercalación a la columna en la instrucción de selección.

+0

Creo que el rendimiento de esto sería horrible, http://dev.mysql.com/doc/refman/5.0/en/view-restrictions.html, http://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker /, al derrotar el punto de los índices en primer lugar ..... – Pacerier

+1

@Pacerier me doy cuenta de que esto es antiguo, pero quería señalar que se ha vinculado a la información sobre la plataforma equivocada. En 2014, SQL Server tuvo vistas más avanzadas con un mejor potencial de rendimiento que las descritas en ese documento MySQL. – Daniel

Cuestiones relacionadas