-- clear out any bad data and create new foreign keys DELETE [Clients] WHERE [ServerName] NOT IN (SELECT [ServerName] FROM [Servers]) ALTER TABLE [Clients] ADD CONSTRAINT [FK_ClientServer] FOREIGN KEY ([ServerName]) REFERENCES [Servers] ([ServerName]) ON DELETE CASCADE DELETE [Subscriptions] WHERE [ClientId] NOT IN (SELECT [ClientId] FROM [Clients]) ALTER TABLE [Subscriptions] ADD CONSTRAINT [FK_SubscriptionClient] FOREIGN KEY ([ClientId], [DomainKey]) REFERENCES [Clients] ([ClientId], [DomainKey]) ON DELETE CASCADE DELETE [Binds] WHERE [ClientId] NOT IN (SELECT [ClientId] FROM [Clients]) ALTER TABLE [Binds] ADD CONSTRAINT [FK_BindClient] FOREIGN KEY ([ClientId], [DomainKey]) REFERENCES [Clients] ([ClientId], [DomainKey]) ON DELETE CASCADE DELETE [Messages] WHERE [ServerName] NOT IN (SELECT [ServerName] FROM [Servers]) ALTER TABLE [Messages] ADD CONSTRAINT [FK_MessageServer] FOREIGN KEY ([ServerName]) REFERENCES [Servers] ([ServerName]) ON DELETE CASCADE -- create new indexes CREATE INDEX [IDX_Client_1] ON [Clients] ([ClientId], [DomainKey], [ServerName]) CREATE INDEX [IDX_Client_2] ON [Clients] ([DomainKey]) CREATE INDEX [IDX_Subscription_1] ON [Subscriptions] ([ClientId], [DomainKey]) CREATE INDEX [IDX_Subscription_2] ON [Subscriptions] ([DomainKey], [ChannelHash], [Channel]) CREATE INDEX [IDX_Bind] ON [Binds] ([ClientId], [DomainKey])