¿Cómo puedo listar tablas sin índices en mi base de datos SQL 2008?lista de tablas sin índices en sql 2008
Editar
Quiero el nombre de esquema y el nombre de la tabla.
¿Cómo puedo listar tablas sin índices en mi base de datos SQL 2008?lista de tablas sin índices en sql 2008
Editar
Quiero el nombre de esquema y el nombre de la tabla.
Esto debería cubrir lo que usted busca. es decir, tablas que son montones (sin índice agrupado) y no tienen ningún índice no agrupado. Utiliza el nuevo sistema. objetos de mesa utilizados en 2005/2008.
Además, es probable que desee buscar tablas que sí tienen un índice agrupado, pero no tienen los índices no agrupados (esta es la segunda parte de la declaración que he dejado comentada.
SELECT
schemaname = OBJECT_SCHEMA_NAME(o.object_id)
,tablename = o.NAME
FROM sys.objects o
INNER JOIN sys.indexes i ON i.OBJECT_ID = o.OBJECT_ID
-- tables that are heaps without any nonclustered indexes
WHERE (
o.type = 'U'
AND o.OBJECT_ID NOT IN (
SELECT OBJECT_ID
FROM sys.indexes
WHERE index_id > 0
)
)
-- OR
-- table that have a clustered index without any nonclustered indexes
--(o.type='U'
-- AND o.OBJECT_ID NOT IN (
-- SELECT OBJECT_ID
-- FROM sys.indexes
-- WHERE index_id>1))
select shema = s.name, table_name = o.name
from sys.objects o
join sys.schemas s on o.schema_id = s.schema_id
where type = 'U'
and not exists (select i.index_id
from sys.indexes i
where i.type <> 0 --ignore default heap index row
and o.object_id = i.object_id)
Editar:
He actualizado el código SQL para incluir el nombre de esquema a lo solicitado. (Tenga en cuenta que tenía que sys.objects en lugar de sysobjects para atender a los esquemas que se introdujeron en SQL 2005)
El catálogo mesas están documentados en la documentación de SQL Server, consulte this link.
This FAQ contiene más muestras y también podría ser útil.
Tenga en cuenta que se trata de tablas del sistema y puede cambiar entre versiones de SQL Server, donde sea posible, utilice las vistas independientes de la tabla del sistema denominadas Information Schema Views.
Además de la sugerencia de @Philip Fourie, es posible que desee pensar qué índices crear.
Una vez que haya accedido a sus datos, SQL Server 2008 realiza un seguimiento de los lugares donde cree que los índices serán útiles (se refiere a estos como "índices faltantes". Hay una mano llena de nuevas Vistas Administradas Dinámicas que pueden mostrar estos índices que faltan y algo de información acerca de ellos
De MSSQlTips:.
- sys.dm_db_missing_index_details - Devuelve información detallada acerca de un índice que falta
- sys.dm_db_missing_index_group_s tatuajes - Devuelve información resumida sobre los desaparecidos grupos de índice
- sys.dm_db_missing_index_groups - Devuelve información sobre un grupo específico de índices que faltan
- sys.dm_db_missing_index_columns (index_handle) - Devuelve información sobre las columnas de las tablas de base de datos que faltan para un índice. Esta es una función y requiere que se pase el index_handle.
Aquí hay un ejemplo:
select SCHEMA_NAME(schema_id), name from sys.tables
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0
cómo obtengo el esquema para estos objetos? –
aún son válidos en 2005/2008 como vistas de 'compatibilidad'.He publicado mi propia versión que usa los objetos del sistema 2005/2008 –
@Raj Más, he actualizado mi respuesta con el nombre de esquema solicitado –