CREATE XML INDEX (Transact-SQL)CREATE XML INDEX (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Crea un índice XML en una tabla especificada.Creates an XML index on a specified table. Se puede crear un índice antes de que la tabla posea datos.An index can be created before there is data in the table. Es posible crear índices XML sobre tablas de otra base de datos si se especifica un nombre de base de datos completo.XML indexes can be created on tables in another database by specifying a qualified database name.

Nota

Para crear un índice relacional, vea CREATE INDEX (Transact-SQL).To create a relational index, see CREATE INDEX (Transact-SQL). Para más información sobre cómo crear un índice espacial, vea CREATE SPATIAL INDEX (Transact-SQL).For information about how to create a spatial index, see CREATE SPATIAL INDEX (Transact-SQL).

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
Create XML Index   
CREATE [ PRIMARY ] XML INDEX index_name   
    ON <object> ( xml_column_name )  
    [ USING XML INDEX xml_index_name   
        [ FOR { VALUE | PATH | PROPERTY } ] ]  
    [ WITH ( <xml_index_option> [ ,...n ] ) ]  
[ ; ]  
  
<object> ::=  
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
  
<xml_index_option> ::=  
{   
    PAD_INDEX  = { ON | OFF }  
  | FILLFACTOR = fillfactor  
  | SORT_IN_TEMPDB = { ON | OFF }  
  | IGNORE_DUP_KEY = OFF  
  | DROP_EXISTING = { ON | OFF }  
  | ONLINE = OFF  
  | ALLOW_ROW_LOCKS = { ON | OFF }  
  | ALLOW_PAGE_LOCKS = { ON | OFF }  
  | MAXDOP = max_degree_of_parallelism  
}  
  

ArgumentosArguments

[PRIMARY] XML[PRIMARY] XML
Crea un índice XML en la columna xml especificada.Creates an XML index on the specified xml column. Cuando se especifica PRIMARY, se crea un índice clúster con la clave clúster formada a partir de la clave de agrupación en clústeres de la tabla de usuario y un identificador del nodo XML.When PRIMARY is specified, a clustered index is created with the clustered key formed from the clustering key of the user table and an XML node identifier. Cada tabla puede tener hasta 249 índices XML.Each table can have up to 249 XML indexes. Observe lo siguiente cuando cree un índice XML:Note the following when you create an XML index:

  • Debe existir un índice clúster en la clave principal de la tabla de usuario.A clustered index must exist on the primary key of the user table.

  • La clave de agrupación en clústeres de la tabla de usuario tiene un límite de 15 columnas.The clustering key of the user table is limited to 15 columns.

  • Cada columna xml de una tabla puede tener un índice XML principal y varios índices XML secundarios.Each xml column in a table can have one primary XML index and multiple secondary XML indexes.

  • Debe existir un índice XML principal en una columna xml para poder crear un índice XML secundario en la columna.A primary XML index on an xml column must exist before a secondary XML index can be created on the column.

  • Solo puede crearse un índice xml en una única columna de xml.An XML index can only be created on a single xml column. No puede crear un índice XML en una columna que no sea xml, así como tampoco crear un índice relacional en una columna xml.You cannot create an XML index on a non-xml column, nor can you create a relational index on an xml column.

  • No puede crear un índice XML, ya sea principal o secundario, en una columna xml en una vista, en una variable con valores de tabla con columnas xml o en variables de tipo xml.You cannot create an XML index, either primary or secondary, on an xml column in a view, on a table-valued variable with xml columns, or xml type variables.

  • No puede crear un índice XML principal en una columna xml calculada.You cannot create a primary XML index on a computed xml column.

  • La configuración de la opción SET debe ser la misma que la requerida para vistas indizadas e índices de columnas calculadas.The SET option settings must be the same as those required for indexed views and computed column indexes. Concretamente, la opción ARITHABORT debe establecerse en ON cuando se crea un índice XML y cuando se insertan, eliminan o actualizan valores en la columna xml.Specifically, the option ARITHABORT must be set to ON when an XML index is created and when inserting, deleting, or updating values in the xml column.

Para obtener más información, consulte Índices XML (SQL Server).For more information, see XML Indexes (SQL Server).

index_nameindex_name
Es el nombre del índice.Is the name of the index. Los nombres de índice deben ser únicos en una tabla, pero no es necesario que sean únicos en una base de datos.Index names must be unique within a table but do not have to be unique within a database. Los nombres de índice deben seguir las reglas de los identificadores.Index names must follow the rules of identifiers.

Los nombres de índices XML principales no pueden comenzar por los siguientes caracteres: # , ## , @ o @@ .Primary XML index names cannot start with the following characters: #, ##, @, or @@.

xml_column_namexml_column_name
Es la columna xml en la que se basa el índice.Is the xml column on which the index is based. Solamente puede especificarse una columna xml en una única definición de índice XML, pero se pueden crear varios índices XML secundarios en una columna xml.Only one xml column can be specified in a single XML index definition; however, multiple secondary XML indexes can be created on an xml column.

USING XML INDEX xml_index_nameUSING XML INDEX xml_index_name
Especifica el índice XML principal que se usará para la creación de un índice XML secundario.Specifies the primary XML index to use in creating a secondary XML index.

FOR { VALUE | PATH | PROPERTY }FOR { VALUE | PATH | PROPERTY }
Especifica el tipo de índice XML secundario.Specifies the type of secondary XML index.

ValueVALUE
Crea un índice XML secundario en las columnas en las que se encuentran las columnas de clave (ruta y valor del nodo) del índice XML principal.Creates a secondary XML index on columns where key columns are (node value and path) of the primary XML index.

PATHPATH
Crea un índice XML secundario en las columnas generadas a partir de valores de ruta y de nodo del índice XML principal.Creates a secondary XML index on columns built on path values and node values in the primary XML index. En el índice secundario PATH, los valores de ruta y de nodo son las columnas de clave que permiten exploraciones eficaces en la búsqueda de rutas.In the PATH secondary index, the path and node values are key columns that allow efficient seeks when searching for paths.

PROPERTYPROPERTY
Crea un índice XML secundario en las columnas (PK, y valor de ruta y de nodo) del índice XML principal, donde PK es la clave principal de la tabla base.Creates a secondary XML index on columns (PK, path and node value) of the primary XML index where PK is the primary key of the base table.

<object>::=<object>::=

Es el objeto completo o no que se indizará.Is the fully qualified or nonfully qualified object to be indexed.

database_namedatabase_name
Es el nombre de la base de datos.Is the name of the database.

schema_nameschema_name
Es el nombre del esquema al que pertenece la tabla.Is the name of the schema to which the table belongs.

table_nametable_name
Es el nombre de la tabla que va a indizarse.Is the name of the table to be indexed.

<xml_index_option> ::=<xml_index_option> ::=

Especifica las opciones que se van a utilizar en la creación del índice.Specifies the options to use when you create the index.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
Especifica el relleno del índice.Specifies index padding. El valor predeterminado es OFF.The default is OFF.

ONON
El porcentaje de espacio disponible especificado por fillfactor se aplica a páginas de nivel intermedio del índice.The percentage of free space that is specified by fillfactor is applied to the intermediate-level pages of the index.

No se especifica OFF ni fillfactor.OFF or fillfactor is not specified
Las páginas de nivel intermedio se llenan casi al máximo de su capacidad y dejan espacio suficiente para al menos una fila del tamaño máximo que puede tener el índice, considerando el conjunto de claves incluidas en las páginas de nivel intermedio.The intermediate-level pages are filled to near capacity, leaving sufficient space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages.

La opción PAD_INDEX solamente resulta útil si también se especifica FILLFACTOR, porque PAD_INDEX utiliza el mismo porcentaje especificado por FILLFACTOR.The PAD_INDEX option is useful only when FILLFACTOR is specified, because PAD_INDEX uses the percentage specified by FILLFACTOR. Si el porcentaje especificado para FILLFACTOR no es lo suficientemente grande como para admitir una fila, Motor de base de datosDatabase Engine invalida internamente el porcentaje para permitir el valor mínimo.If the percentage specified for FILLFACTOR is not large enough to allow for one row, the Motor de base de datosDatabase Engine internally overrides the percentage to allow for the minimum. El número de filas de una página de nivel intermedio del índice no es nunca inferior a dos, independientemente de lo bajo que sea el valor de fillfactor.The number of rows on an intermediate index page is never less than two, regardless of how low the value of fillfactor.

FILLFACTOR = fillfactorFILLFACTOR =fillfactor
Especifica un porcentaje que indica cuánto debe llenar el Motor de base de datosDatabase Engine el nivel hoja de cada página de índice durante la creación o nueva generación de los índices.Specifies a percentage that indicates how full the Motor de base de datosDatabase Engine should make the leaf level of each index page during index creation or rebuild. fillfactor debe ser un valor entero comprendido entre 1 y 100.fillfactor must be an integer value from 1 to 100. El valor predeterminado es 0.The default is 0. Si fillfactor es 100 o 0, el Motor de base de datosDatabase Engine crea índices con las páginas hoja llenas al máximo de su capacidad.If fillfactor is 100 or 0, the Motor de base de datosDatabase Engine creates indexes with leaf pages filled to capacity.

Nota

Los valores de fill factor 0 y 100 son idénticos.Fill factor values 0 and 100 are the same in all respects.

La configuración de FILLFACTOR solo se aplica cuando se crea o se vuelve a generar el índice.The FILLFACTOR setting applies only when the index is created or rebuilt. Motor de base de datosDatabase Engine no mantiene dinámicamente el porcentaje especificado de espacio disponible de las páginas.The Motor de base de datosDatabase Engine does not dynamically keep the specified percentage of empty space in the pages. Para ver la configuración del factor de relleno, use la vista de catálogo sys.indexes.To view the fill factor setting, use the sys.indexes catalog view.

Importante

La creación de un índice clúster con un valor de FILLFACTOR menor que 100 afecta a la cantidad de espacio de almacenamiento que ocupan los datos, porque Motor de base de datosDatabase Engine vuelve a distribuir los datos cuando crea el índice clúster.Creating a clustered index with a FILLFACTOR less than 100 affects the amount of storage space the data occupies because the Motor de base de datosDatabase Engine redistributes the data when it creates the clustered index.

Para obtener más información, vea Especificar el factor de relleno para un índice.For more information, see Specify Fill Factor for an Index.

SORT_IN_TEMPDB = { ON | OFF }SORT_IN_TEMPDB = { ON | OFF }
Indica si deben almacenarse resultados temporales de orden en tempdb.Specifies whether to store temporary sort results in tempdb. El valor predeterminado es OFF.The default is OFF.

ONON
Los resultados de ordenación intermedios utilizados para generar el índice se almacenan en tempdb.The intermediate sort results that are used to build the index are stored in tempdb. Esto puede reducir el tiempo necesario para crear un índice si tempdb y la base de datos de usuarios están en conjuntos de discos distintos.This may reduce the time required to create an index if tempdb is on a different set of disks than the user database. Sin embargo, esto aumenta la cantidad de espacio en disco utilizado durante la generación del índice.However, this increases the amount of disk space that is used during the index build.

OFFOFF
Los resultados de orden intermedios se almacenan en la misma base de datos que el índice.The intermediate sort results are stored in the same database as the index.

Además del espacio necesario en la base de datos del usuario para crear el índice, tempdb debe tener la misma cantidad de espacio adicional para almacenar los resultados de orden intermedio.In addition to the space required in the user database to create the index, tempdb must have about the same amount of additional space to hold the intermediate sort results. Para más información, vea Opción SORT_IN_TEMPDB para índices.For more information, see SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY =OFFIGNORE_DUP_KEY =OFF
No tiene ningún efecto sobre los índices XML porque el tipo de índice nunca es único.Has no effect for XML indexes because the index type is never unique. No establezca esta opción en ON porque, de lo contrario, se producirá un error.Do not set this option to ON, or else an error is raised.

DROP_EXISTING = { ON | OFF }DROP_EXISTING = { ON | OFF }
Especifica que se quite y vuelva a generarse el índice XML con nombre preexistente.Specifies that the named, preexisting XML index is dropped and rebuilt. El valor predeterminado es OFF.The default is OFF.

ONON
El índice existente se quita y se vuelve a generar.The existing index is dropped and rebuilt. El nombre de índice especificado debe ser el mismo que el de un índice actualmente existente; sin embargo, la definición se puede modificar.The index name specified must be the same as a currently existing index; however, the index definition can be modified. Por ejemplo, puede especificar columnas, criterio de ordenación, esquema de particionamiento u opciones de índice diferentes.For example, you can specify different columns, sort order, partition scheme, or index options.

OFFOFF
Se muestra un error si ya existe el nombre de índice especificado.An error is displayed if the specified index name already exists.

El tipo de índice no puede cambiarse utilizando DROP_EXISTING.The index type cannot be changed by using DROP_EXISTING. Asimismo, un índice XML principal no puede volver a definirse como un índice XML secundario, o viceversa.Also, a primary XML index cannot be redefined as a secondary XML index, or vice versa.

ONLINE =OFFONLINE =OFF
Especifica que las tablas subyacentes y los índices asociados no están disponibles para la realización de consultas y modificaciones de datos durante la operación del índice.Specifies that underlying tables and associated indexes are not available for queries and data modification during the index operation. En esta versión de SQL ServerSQL Server, no se admiten generaciones de índices en línea para los índices XML.In this version of SQL ServerSQL Server, online index builds are not supported for XML indexes. Si esta opción se establece en ON para un índice XML, se produce un error.If this option is set to ON for a XML index, an error is raised. Omita la opción ONLINE o establezca ONLINE en OFF.Either omit the ONLINE option or set ONLINE to OFF.

Una operación de índice sin conexión para crear, volver a crear o quitar un índice XML adquiere un bloqueo de modificación del esquema (Sch-M) de la tabla.An offline index operation that creates, rebuilds, or drops a XML index, acquires a Schema modification (Sch-M) lock on the table. Esto evita que todos los usuarios tengan acceso a la tabla subyacente durante la operación.This prevents all user access to the underlying table for the duration of the operation.

Nota

Las operaciones de índices en línea no están disponibles en todas las ediciones de MicrosoftMicrosoftSQL ServerSQL Server.Online index operations are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL ServerSQL Server, vea Características compatibles con las ediciones de SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
Especifica si se permiten los bloqueos de fila.Specifies whether row locks are allowed. El valor predeterminado es ON.The default is ON.

ONON
Los bloqueos de fila se admiten al obtener acceso al índice.Row locks are allowed when accessing the index. El Motor de base de datosDatabase Engine determina cuándo se usan los bloqueos de fila.The Motor de base de datosDatabase Engine determines when row locks are used.

OFFOFF
No se usan los bloqueos de fila.Row locks are not used.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
Especifica si se permiten bloqueos de página.Specifies whether page locks are allowed. El valor predeterminado es ON.The default is ON.

ONON
Los bloqueos de página se permiten al obtener acceso al índice.Page locks are allowed when accessing the index. Motor de base de datosDatabase Engine determina el momento en que se usan los bloqueos de página.The Motor de base de datosDatabase Engine determines when page locks are used.

OFFOFF
No se utilizan bloqueos de página.Page locks are not used.

MAXDOP = max_degree_of_parallelismMAXDOP =max_degree_of_parallelism
Reemplaza la opción Establecer la opción de configuración del servidor Grado máximo de paralelismo durante la operación de índice.Overrides the Configure the max degree of parallelism Server Configuration Option configuration option for the duration of the index operation. Utilice MAXDOP para establecer un límite para el número de procesadores utilizados en la ejecución de un plan paralelo.Use MAXDOP to limit the number of processors used in a parallel plan execution. El máximo es 64 procesadores.The maximum is 64 processors.

Importante

Aunque la opción MAXDOP se admite sintácticamente para todos los índices XML, para un índice XML primario, CREATE XML INDEX utiliza un solo procesador.Although the MAXDOP option is syntactically supported for all XML indexes, for a primary XML index, CREATE XML INDEX uses only a single processor.

max_degree_of_parallelism puede tener estos valores:max_degree_of_parallelism can be:

11
Suprime la generación de planes paralelos.Suppresses parallel plan generation.

>1>1
Restringe el número máximo de procesadores utilizados en una operación de índice paralelo al número especificado o a un número inferior, en función de la actual carga de trabajo del sistema.Restricts the maximum number of processors used in a parallel index operation to the specified number or fewer based on the current system workload.

0 (predeterminado)0 (default)
Usa el número real de procesadores o menos, según la carga de trabajo actual del sistema.Uses the actual number of processors or fewer based on the current system workload.

Para obtener más información, vea Configurar operaciones de índice en paralelo.For more information, see Configure Parallel Index Operations.

Nota

Las operaciones de índices en paralelo no están disponibles en todas las ediciones de MicrosoftMicrosoftSQL ServerSQL Server.Parallel index operations are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL ServerSQL Server, vea Características compatibles con las ediciones de SQL Server 2016.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

NotasRemarks

Las columnas calculadas derivadas de los tipos de datos xml se puede indizar como una columna de clave o como una columna sin clave incluida, siempre que el tipo de datos de la columna calculada esté disponible como columna de clave de índice o columna sin clave.Computed columns derived from xml data types can be indexed either as a key or included nonkey column as long as the computed column data type is allowable as an index key column or nonkey column. No puede crear un índice XML principal en una columna xml calculada.You cannot create a primary XML index on a computed xml column.

Para ver información sobre los índices XML, use la vista de catálogo sys.xml_indexes.To view information about XML indexes, use the sys.xml_indexes catalog view.

Para más información sobre los índices XML, vea Índices XML (SQL Server).For more information about XML indexes, see XML Indexes (SQL Server).

Notas adicionales sobre la creación de índicesAdditional Remarks on Index Creation

Para más información sobre la creación de índices, vea la sección "Comentarios" de CREATE INDEX (Transact-SQL).For more information about index creation, see the "Remarks" section in CREATE INDEX (Transact-SQL).

EjemplosExamples

A.A. Crear un índice XML principalCreating a primary XML index

El ejemplo siguiente crea un índice XML principal en la columna CatalogDescription de la tabla Production.ProductModel.The following example creates a primary XML index on the CatalogDescription column in the Production.ProductModel table.

USE AdventureWorks2012;  
GO  
IF EXISTS (SELECT * FROM sys.indexes  
            WHERE name = N'PXML_ProductModel_CatalogDescription')  
    DROP INDEX PXML_ProductModel_CatalogDescription   
        ON Production.ProductModel;  
GO  
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription  
    ON Production.ProductModel (CatalogDescription);  
GO  

B.B. Crear un índice XML secundarioCreating a secondary XML index

El ejemplo siguiente crea un índice XML secundario en la columna CatalogDescription de la tabla Production.ProductModel.The following example creates a secondary XML index on the CatalogDescription column in the Production.ProductModel table.

USE AdventureWorks2012;  
GO  
IF EXISTS (SELECT name FROM sys.indexes  
            WHERE name = N'IXML_ProductModel_CatalogDescription_Path')  
    DROP INDEX IXML_ProductModel_CatalogDescription_Path  
        ON Production.ProductModel;  
GO  
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path   
    ON Production.ProductModel (CatalogDescription)  
    USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;  
GO  

Consulte tambiénSee Also

ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
Tipos de datos (Transact-SQL) Data Types (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
Índices XML (SQL Server) XML Indexes (SQL Server)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL) sys.index_columns (Transact-SQL)
sys.xml_indexes (Transact-SQL) sys.xml_indexes (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Índices XML (SQL Server)XML Indexes (SQL Server)