2009-09-02 17 views

Odpowiedz

7

Powinno to obejmować to, czego szukasz. tj. tabele będące kupkami (bez indeksu klastrowego) i nie mają żadnych indeksów nieklastrowych. Używa nowej sys. obiekty tabel używane w latach 2005/2008.

ponadto prawdopodobnie chcesz spojrzeć na tabele, które mają indeks klastra, ale nie mają nieklastrowany indeksy (to jest 2. część sprawozdania, które zostawiłem zakomentowanym.

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) 

Edit:
I zostały zaktualizowane SQL zawierać nazwę schematu na żądanie. (Uwaga musiałem sys.objects zamiast sysobjects zaspokoić schematów, które zostały wprowadzone w SQL 2005)

Katalog tabele są udokumentowane w dokumentacji SQL Server, zobacz this link.
This FAQ zawiera więcej próbek i może być również przydatne.

Należy zauważyć, że są to tabele systemowe i można je zmieniać między wersjami serwera SQL, w miarę możliwości należy raczej używać widoków niezależnych od tabeli systemowej o nazwie Information Schema Views.

+0

Skąd wziąć schemat dla tych obiektów? –

+0

są nadal aktualne w 2005/2008 jako widoki "zgodności".Napisałem własną wersję, która używa obiektów systemowych 2005/2008 –

+0

@Raj Więcej, zaktualizowałem swoją odpowiedź podając nazwę schematu zgodnie z żądaniem –

4

Oprócz sugestii @Philip Fourie warto zastanowić się, które indeksy utworzyć.

Po uzyskaniu dostępu do swoich danych program SQL Server 2008 śledzi miejsca, w których jego zdaniem pomocne będą indeksy (określa je jako "brakujące indeksy"). Są to strony pełne nowych dynamicznych widoków zarządzanych, które mogą być wyświetlane. te brakujące indeksy i kilka informacji o nich

Od MSSQlTips.

  • sys.dm_db_missing_index_details - Zwraca szczegółowe informacje na temat zaginionego indeksu
  • sys.dm_db_missing_index_group_s Tats - zwraca informacje podsumowujące o brakującym grup wskaźników
  • sys.dm_db_missing_index_groups - Zwraca informacje o konkretnej grupy brakujących indeksów
  • sys.dm_db_missing_index_columns (index_handle) - zwraca informacje o kolumnach tabeli bazy danych, których brakuje na indeksie. Jest to funkcja i wymaga podania parametru index_handle.
5

Oto przykład:

select SCHEMA_NAME(schema_id), name from sys.tables 
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0 
Powiązane problemy