gruen
Neuer Benutzer
- Beiträge
- 2
Hallo Forum!
Ich entwerfe gerade eine simple Datenbank um ein paar Inspektionsergebnisse zu speichern. Dafür nutze ich SQL Server 2014 Express auf einem Windows 7 PC. Damit die Datenbank nicht zu voll wird, möchte ich alte Daten in regelmäßigen Abständen löschen.
Momentan habe ich eine Tabelle 'Objects' mit ca. 175000 Einträgen und eine Tabelle 'Defects' mit ca. 350000 Einträgen. 'Objects' hat eine Spalte 'ObjectId' als Primärschlüssel und 'Defects' hat im Schnitt zwei Einträge pro 'ObjectId'. Ich lösche jeweils die ca. 50000 Einträge mit den kleinsten ObjectIds.
Das Löschen in 'Objects' dauert ca. 200 ms.
Das Löschen in 'Defects' dauert ca. 3000 ms.
Mit dem Management Studio erzeugte CREATE-Skripte sehen folgendermaßen aus:
[...]
CREATE TABLE [dbo].[Defects](
[ObjectId] [bigint] NOT NULL,
[DefectId] [int] NOT NULL
) ON [PRIMARY]
[...]
CREATE CLUSTERED INDEX [IX_Defects] ON [dbo].[Defects]
(
[ObjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
[...]
CREATE TABLE [dbo].[Objects](
[ObjectId] [bigint] NOT NULL,
[EjectDateTime] [datetime2](2) NOT NULL,
PRIMARY KEY CLUSTERED
(
[ObjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
[...]
Meine Löschanweisungen sind:
delete from Defects where objectid <= X und
delete from Objects where objectid <= X
Der gruppierte Index in 'Defects' scheint mir nicht zu helfen.
Kann mir jemand sagen, warum das Löschen in 'Defects' so langsam ist, bzw. wie ich es beschleunigen kann?
Vielen Dank schon mal!
- Michael
Ich entwerfe gerade eine simple Datenbank um ein paar Inspektionsergebnisse zu speichern. Dafür nutze ich SQL Server 2014 Express auf einem Windows 7 PC. Damit die Datenbank nicht zu voll wird, möchte ich alte Daten in regelmäßigen Abständen löschen.
Momentan habe ich eine Tabelle 'Objects' mit ca. 175000 Einträgen und eine Tabelle 'Defects' mit ca. 350000 Einträgen. 'Objects' hat eine Spalte 'ObjectId' als Primärschlüssel und 'Defects' hat im Schnitt zwei Einträge pro 'ObjectId'. Ich lösche jeweils die ca. 50000 Einträge mit den kleinsten ObjectIds.
Das Löschen in 'Objects' dauert ca. 200 ms.
Das Löschen in 'Defects' dauert ca. 3000 ms.
Mit dem Management Studio erzeugte CREATE-Skripte sehen folgendermaßen aus:
[...]
CREATE TABLE [dbo].[Defects](
[ObjectId] [bigint] NOT NULL,
[DefectId] [int] NOT NULL
) ON [PRIMARY]
[...]
CREATE CLUSTERED INDEX [IX_Defects] ON [dbo].[Defects]
(
[ObjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
[...]
CREATE TABLE [dbo].[Objects](
[ObjectId] [bigint] NOT NULL,
[EjectDateTime] [datetime2](2) NOT NULL,
PRIMARY KEY CLUSTERED
(
[ObjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
[...]
Meine Löschanweisungen sind:
delete from Defects where objectid <= X und
delete from Objects where objectid <= X
Der gruppierte Index in 'Defects' scheint mir nicht zu helfen.
Kann mir jemand sagen, warum das Löschen in 'Defects' so langsam ist, bzw. wie ich es beschleunigen kann?
Vielen Dank schon mal!
- Michael