2009-09-02 30 views

Respuesta

7

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)) 
4
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.

+0

cómo obtengo el esquema para estos objetos? –

+0

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 –

+0

@Raj Más, he actualizado mi respuesta con el nombre de esquema solicitado –

4

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.
5

Aquí hay un ejemplo:

select SCHEMA_NAME(schema_id), name from sys.tables 
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0 
Cuestiones relacionadas