Come si elencano le tabelle senza indici nel mio database SQL 2008?elenco di tabelle senza indici in sql 2008
Modifica
Voglio il nome dello schema e il nome della tabella.
Come si elencano le tabelle senza indici nel mio database SQL 2008?elenco di tabelle senza indici in sql 2008
Modifica
Voglio il nome dello schema e il nome della tabella.
Questo dovrebbe coprire ciò che stai cercando. Ad esempio tabelle che sono heap (nessun indice cluster) e non hanno indici non cluster. Usa il nuovo sys. oggetti da tavolo usati nel 2005/2008.
in aggiunta, probabilmente si consiglia di cercare le tabelle che hanno un indice cluster, ma non hanno gli indici non cluster (questa è la seconda parte della dichiarazione, che ho lasciato commentata.
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)
Edit:
Ho aggiornato il codice SQL per includere il nome dello schema come richiesto. (Nota ho dovuto sys.objects invece di sysobjects per soddisfare gli schemi che sono state introdotte in SQL 2005)
Il catalogo tavoli sono documentati nella documentazione di SQL Server, vedere this link.
This FAQ contiene più campioni e potrebbe anche essere utile.
Si noti che queste sono tabelle di sistema e possono cambiare tra le versioni del server SQL, laddove possibile utilizzare piuttosto le viste indipendenti dalla tabella di sistema denominate Information Schema Views.
Oltre al suggerimento di @Philip Fourie, è possibile pensare a quali indici creare.
Dopo aver eseguito l'accesso ai dati, SQL Server 2008 tiene traccia dei luoghi in cui ritiene che gli indici siano utili (si riferisce a questi come "indici mancanti". C'è una mano piena di nuove viste gestite dinamiche che possono mostrare questi indici mancanti e alcune informazioni su di loro
Da MSSQlTips:.
- sys.dm_db_missing_index_details - Restituisce informazioni dettagliate su un indice mancante
- sys.dm_db_missing_index_group_s tatuaggi - restituisce le informazioni di riepilogo di perdere gruppi di indice
- sys.dm_db_missing_index_groups - Restituisce informazioni su uno specifico gruppo di indici mancanti
- sys.dm_db_missing_index_columns (index_handle) - restituisce le informazioni sulle colonne della tabella del database che mancano per un indice. Questa è una funzione e richiede l'index_handle da passare.
Ecco un esempio:
select SCHEMA_NAME(schema_id), name from sys.tables
where OBJECTPROPERTY(object_id, 'IsIndexed')= 0
come ottengo lo schema per questi oggetti? –
sono ancora validi nel 2005/2008 come viste di 'compatibilità'.Ho pubblicato la mia versione che utilizza gli oggetti di sistema 2005/2008 –
@Raj Altro, ho aggiornato la mia risposta con il nome dello schema come richiesto –