Grosse Tabellen handeln. Abfragen optimieren

thomasfischer25

Neuer Benutzer
Beiträge
4
Hi Leute,

Ich benutze einen Microsoft SQL Server 2012 um die Daten verschiedener Produkte zu speichern. Es besteht eine Tabelle, welche den Produktionsstatus des Produktes festhaelt. Hier sind alle moeglichen Start und End Termine festgehalten. Sobald ein solches Produkt aus der Produktion verschickt wird, wird im Feld "Versendet am" ein Datum eingetragen.

Anschliessend werden solche Records nur noch fuer nachtraegliche Report-Zwecke verwendet. Damit wird die Tabelle aber immer grosser. Direkte Abfragen oder Abfragen ueber Views dauern jedoch immer laenger bis teils zum Timeout. Die meisten Views welche auf die Tabelle "zugreifen" haben eine Abfrage mit WHERE [Versendet am] IS NOT NULL oder eben WHERE [Versendet am] IS NULL.

Wie loest man ein solches Problem?
Meine Ideen waren entweder eine weitere Tabelle zu erstellen, in der alle versendeten Produkte landen sobald sie versendet wurden.
Oder gibt es eine Moeglichkeit dem Server zu sagen, dass meistens nach [Versendet am] unterschieden wird und so die Optimierung irgendwie in eine Richtung zu leiten?!?!?!

Vielen Dank!
 
Werbung:
Hi Leute,

Ich benutze einen Microsoft SQL Server 2012 um die Daten verschiedener Produkte zu speichern. Es besteht eine Tabelle, welche den Produktionsstatus des Produktes festhaelt. Hier sind alle moeglichen Start und End Termine festgehalten. Sobald ein solches Produkt aus der Produktion verschickt wird, wird im Feld "Versendet am" ein Datum eingetragen.

Anschliessend werden solche Records nur noch fuer nachtraegliche Report-Zwecke verwendet. Damit wird die Tabelle aber immer grosser. Direkte Abfragen oder Abfragen ueber Views dauern jedoch immer laenger bis teils zum Timeout. Die meisten Views welche auf die Tabelle "zugreifen" haben eine Abfrage mit WHERE [Versendet am] IS NOT NULL oder eben WHERE [Versendet am] IS NULL.

Wie loest man ein solches Problem?
Meine Ideen waren entweder eine weitere Tabelle zu erstellen, in der alle versendeten Produkte landen sobald sie versendet wurden.
Oder gibt es eine Moeglichkeit dem Server zu sagen, dass meistens nach [Versendet am] unterschieden wird und so die Optimierung irgendwie in eine Richtung zu leiten?!?!?!

Vielen Dank!


Unter PG würde ich EXPLAIN befragen. Ich weiß nicht, ob M$SQL partielle Indexe kennt. Es kennt aber sicher Partitionierung, Du könntest also z.B. nach diesem Datum partitionieren. Wenn Du aber nach IS [NOT] NULL abfragst hat das auch nur begrenzten Wert.

Ach ja: wie groß ist 'groß'?
 
Ich habe leider kaum Systeme mit irgendwo mehr als 10k Datensätzen aber ich würde erstmal überhaupt einen Index auf die Spalte Versendet_am legen, das sollte eigentlich schon einen großen Effekt haben.

Bestimmte Datensätze in eine andere Tabelle zu "kopieren" halte ich für ganz fießen Fusch...
 
Werbung:
Zurück
Oben