Ciao a tutti,
sto lavorando con un database SQL Server 2000 in cui le tabelle sono state disegnate in modo che l'indice cluster sia sempre sulla chiave primaria (default di SQL Server quando la chiave primaria viene creata insieme alla tabella). Con il passare del tempo il database è cresciuto e ora ho qualche problema di performance, le query difficilmente riescono ad utilizzare l'indice cluster.
Esempio:
/* Creazione tabella TMPT1 */
CREATE
TABLE TMPT1
(
ID INTEGER IDENTITY(1, 1) NOT NULL,
CODICE VARCHAR
(20),
DESCR VARCHAR
(40)PRIMARY KEY(ID)
)
/* Creazione tabella TMPT2 */
CREATE
TABLE TMPT2
(
ID INTEGER IDENTITY(1, 1) NOT NULL,
IDTMPT1 INTEGER
NULLPRIMARY KEY(ID)
)
/* Creazione chiave esterna su TMPT1 */
ALTER TABLE [dbo].[TMPT2] WITH CHECK
ADD FOREIGN KEY([IDTMPT1]) REFERENCES [dbo].[TMPT1] ([ID])
Vorrei eliminare gli indici cluster creati sulla chiave primaria (tipicamente l'ID come nell'esempio), sulla chiave primaria creare un indice NON cluster e poi analizzare, tabella per tabella, i campi su cui ha più senso mettere l'indice cluster in base alle query e al tipo di tabella.
Se non sbaglio per eliminare l'indice cluster, in questa situazione, devo prima eliminare tutte le chiavi esterne che puntano al campo ID sul quale è presente l'indice cluster.
Vorrei sviluppare una procedura che riceva in input il nome della tabella e svolga questo lavoro... prima di iniziare, volevo sapere se avete suggerimenti per utilizzare eventuali stored procedure o funzioni native di SQL Server.
Grazie, ciao
Sergio