Suchgeschwindigkeit in SQL Datenbank

Guten Tag,
es liegt eine SQL Datenbank vor mit Rezepten, Struktur unbekannt. Diese ist unterteilt in Backen, Kochen, Grillen, kaltspeise usw.
Frage:
Ich suche nach 1 Rezept über alle Kategorien. Laufzeit 2 Minuten
Ich suche nach 1 Rezept nur in Grillen. Laufzeit 30 Sekunden
Ist der Unterschied normal oder kann ich hier darauf schließen, daß die Datenbank schlecht oder gar nicht indexiert ist?
Danke
Michael

Ist der Unterschied normal oder kann ich hier darauf
schließen, daß die Datenbank schlecht oder gar nicht indexiert
ist?

Beides.

Wenn man die Suche nach einem Kriterium, welches recht einfach zu unterscheiden ist (und evtl dazu noch indiziert ist) einschraenkt, dann muessen natuerlich auch weniger weitere Daten durchsucht werden.
Ein Vergleich von „Ist Spalte = Wert“ ist wesentlich einfacher als „Kommt der Wert irgendwo in der Spalte vor“ … da geht es der Datenbank nicht anders als einem Menschen.

Trotzdem muss man anhand der Zeiten schlussfolgern das bei der Abfrage irgendetwas nicht korrekt ist. Entweder fehlt die Indizierung oder die Indizierung wurde falsch/unsinnig gesetzt. Oder die Hardware, auf der die Datenbank laeuft, ist einfach nicht ausreichend.

Ohne da weitere Randdaten zu kennen laesst sich das alles aber nicht genau sagen.

Gruesse
Stefan

Hi Stefan,
in beiden Fällen ist die Abfrage identisch, nur daß im schnelleren Fall nur in einer Rubrik gesucht wird. Daher komme ich zu der Annahme, es ist ein Index Problem
Grüße
Michael

Wenn man die Suche nach einem Kriterium, welches recht einfach
zu unterscheiden ist (und evtl dazu noch indiziert ist)
einschraenkt, dann muessen natuerlich auch weniger weitere
Daten durchsucht werden.
Ein Vergleich von „Ist Spalte = Wert“ ist wesentlich einfacher
als „Kommt der Wert irgendwo in der Spalte vor“ … da geht es
der Datenbank nicht anders als einem Menschen.

Hi!

in beiden Fällen ist die Abfrage identisch, nur daß im
schnelleren Fall nur in einer Rubrik gesucht wird. Daher komme
ich zu der Annahme, es ist ein Index Problem

Also ist die Abfrage definitiv nicht ident - im ersten Fall suchst Du bereits in einer Teilmenge „Grillen“, beim zweiten gibt es diese Teilmenge nicht und Du suchst über alles drüber - und das dauert dann natürlich.

Allerdings kann man auch jedes Statement noch schneller machen - dies ist aber eher mehr Probiererei und vor allem Routine als diverse Regelverhalten.

Du kannst die Datenbankobjekte (Tabellen, Indizes, etc.) tunen, Du kannst die Abfrage selber tunen, Du kannst das System tunen (Hardware, etc.) - die besten Abfragen nützen nix, wenn das Bottleneck die Festplatte und/oder der Hauptspeicher ist …

Grüße,
Tomh

PS: Von 30 Sekunden auf 2 Minuten beim Beachten der zu durchsuchenden Menge finde ich persönlich nicht schlimm.
Was ich schlimm finde, ist, daß bereits eine „einfache“ Abfrage 30 Sekunden lang rödelt … bekommst Du dieses Antwortzeitverhalten runter, wird auch der Rest dementsprechend schneller.

Hallo Michael,

abgesehen von dem was schon als Antort gegeben wurde:

Da du schreibst „1 Rezept“:
Wenn du schon voher sagen kannst, dass es nur eine Lösung sein wird, oder du nur eine benötigst:

select top 1 * from meineTabelle

dann wird die Suche abgebrochen, wenn ein Rezept gefunden wurde. Klar, im Extremfall dauert es ganuso lange, im Mittel sollte aber die Zeit sich halbieren.

Für eine Suche in „meiner“ db habe ich auch separate Suchspalten eingeführt in denen ich die „eigentlichen“ Suchbegriffe (redundant) speichere.

Poste doch mal das Statement, 2 Min halte ich für extrem: Entweder extrem viele Daten oder komplexe Abfrage. Eine indizierung löst imho ja nicht das eigentliche Problem sondern beschleunigt nur „das Elend“.

mfg

Dirk.Pegasus

Moin,

mein Auto fährt 140 km/h und wenn ich es voll bepacke fährt es gar nur 120 km/h - ist das normal?

So sinnig ist deine Anfrage ohne auch nur geringste Informationen zu geben ;o)))

Gruß

Bernd

Hallo zusammen,

ich kann Stefan nur beipflichten, daß an der Stelle wohl mit der Indizierung was nicht paßt oder ebend mit der Hardware (glaube ich aber eher weniger).
Interessant wäre auf jeden Fall, wieviele Datensätze in der Tabelle sind.

Hier mal ein kleines Beispiel von uns:
Artikelstamm, etwas mehr als 4 Mio Datensätze.
Suche nach einem Teil der Artikelnummer (ist indiziert), Rückgabe ca. 450 Datensätze, weniger als 1 sec.
Das sind Wert, die ich erhalte, wenn ich direkt auf dem Datenbank-Server abfrage.
Leider habe wir über die normale Anwendung aber ähnliche Zeitprobleme (mehrere Minuten) zum Suchen von Artikeln, weil der Softwarehersteller von der Anwendung da wirklich schlecht programiert hat und unsinnige Abfragen auf die DB macht und diese bisher noch nicht geändert hat.

Gruß
Ingo