ver una tablas tabla mantenimiento fragmentacion estadisticas consultar analisis sql sql-server-2008 indexing

una - mantenimiento de tablas sql server



Consulta para verificar el índice en una tabla (9)

Necesito una consulta para ver si una tabla ya tiene índices.


Creó un procedimiento almacenado para mostrar los índices de una tabla en la base de datos en SQL Server

create procedure _ListIndexes(@tableName nvarchar(200)) as begin /* exec _ListIndexes ''<YOUR TABLE NAME>'' */ SELECT DB_NAME(DB_ID()) as DBName,SCH.name + ''.'' + TBL.name AS TableName,IDX.name as IndexName, IDX.type_desc AS IndexType,COL.Name as ColumnName,IC.* FROM sys.tables AS TBL INNER JOIN sys.schemas AS SCH ON TBL.schema_id = SCH.schema_id INNER JOIN sys.indexes AS IDX ON TBL.object_id = IDX.object_id INNER JOIN sys.index_columns IC ON IDX.object_id = IC.object_id and IDX.index_id = IC.index_id INNER JOIN sys.columns COL ON ic.object_id = COL.object_id and IC.column_id = COL.column_id where TBL.name = @tableName ORDER BY TableName,IDX.name end


En Oracle:

  • Determine todos los índices en la tabla:

    SELECT index_name FROM user_indexes WHERE table_name = :table

  • Determine columnas, índices y columnas en el índice:

    SELECT index_name , column_position , column_name FROM user_ind_columns WHERE table_name = :table ORDER BY index_name, column_order

Referencias


En SQL Server, esto mostrará una lista de todos los índices para una tabla especificada:

select * from sys.indexes where object_id = (select object_id from sys.objects where name = ''MYTABLE'')

Esta consulta mostrará una lista de todas las tablas sin un índice:

SELECT name FROM sys.tables WHERE OBJECTPROPERTY(object_id,''IsIndexed'') = 0

Y esta es una pregunta frecuente de MSDN sobre un tema relacionado:
Consultar las preguntas frecuentes del catálogo del sistema de SQL Server


Esto es lo que utilicé para TSQL que se encargó del problema de que el nombre de mi tabla podría contener el nombre del esquema y posiblemente el nombre de la base de datos:

DECLARE @THETABLE varchar(100); SET @THETABLE = ''theschema.thetable''; select i.* from sys.indexes i where i.object_id = OBJECT_ID(@THETABLE) and i.name is not NULL;

El caso de uso para esto es que quería la lista de índices para una tabla con nombre para poder escribir un procedimiento que comprimiera dinámicamente todos los índices en una tabla.


La mayoría de los RDBMS modernos son compatibles con el esquema INFORMATION_SCHEMA . Si la tuya lo admite, entonces quieres INFORMATION_SCHEMA.TABLE_CONSTRAINTS o INFORMATION_SCHEMA.KEY_COLUMN_USAGE , o quizás ambas.

Para ver si los tuyos lo admiten es tan simple como correr

select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS

EDITAR: SQL Server tiene INFORMATION_SCHEMA , y es más fácil de usar que sus tablas específicas del proveedor, así que simplemente vaya con él.


Primero, verifica tu ID de tabla (también conocido como object_id)

SELECT * FROM sys.objects WHERE type = ''U'' ORDER BY name

entonces puedes obtener los nombres de la columna. Por ejemplo, suponiendo que haya obtenido de la consulta previa el número 4 como object_id

SELECT c.name FROM sys.index_columns ic INNER JOIN sys.columns c ON c.column_id = ic.column_id WHERE ic.object_id = 4 AND c.object_id = 4


Si está utilizando MySQL, puede ejecutar SHOW KEYS FROM table o SHOW INDEXES FROM table


Si solo necesita las columnas indexadas EXEC sp_helpindex ''TABLE_NAME''


compruebe esto también. Ofrece una descripción general de las restricciones asociadas en una base de datos. Incluya también la facilitación donde la condición con el nombre de la tabla de interés brinda información más rápido.

select a.TABLE_CATALOG as DB_name,a.TABLE_SCHEMA as tbl_schema, a.TABLE_NAME as tbl_name,a. CONSTRAINT_NAME as constraint_name,b.CONSTRAINT_TYPE from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE a join INFORMATION_SCHEMA.TABLE_CONSTRAINTS b on a.CONSTRAINT_NAME=b.CONSTRAINT_NAME