PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Werden bei SQL die Indexe automatisch benutzt?


rotalever
2008-06-19, 14:30:19
Der Index dient ja zum Beispiel dazu, dass ein SELECT mit einer WHERE Abfrage schneller ausgeführt wird. Wenn zum beispiel eine Spalte "foo" heißt dann könnte man WHERE foo < 700 etc. machen und ein Index würde das ganze beschleunigen.
Was ich mich allerdings frage ist, ob man den Syntax der Query irgendwie verändern muss, damit der Index überhaupt genutzt wird? Schließlich gibt man dem Index ja einen Namen bei der Erstellung, z.B: foo_index. Der muss ja auch irgendeinen Sinn haben..:smile: Und da hätte ich jetzt gedacht, man müsste bei einer Query dann diesen Indexnamen statt dem Colum-namen verwenden. So dass dann aus
WHERE foo < 700
sowas wird:
WHERE foo_index < 700
Leider hab ich dazu überhaut nichts gefunden.

Wenn es eine Rolle spielt, das DB-System ist PostgreSQL.

Shink
2008-06-19, 14:46:45
Der Index dient ja zum Beispiel dazu, dass ein SELECT mit einer WHERE Abfrage schneller ausgeführt wird. Wenn zum beispiel eine Spalte "foo" heißt dann könnte man WHERE foo < 700 etc. machen und ein Index würde das ganze beschleunigen.
Was ich mich allerdings frage ist, ob man den Syntax der Query irgendwie verändern muss, damit der Index überhaupt genutzt wird? Schließlich gibt man dem Index ja einen Namen bei der Erstellung, z.B: foo_index. Der muss ja auch irgendeinen Sinn haben..:smile:
Damit man den Index finden und später wieder löschen kann bekommt er in den meisten Datenbanken auch einen Namen. Das wars aber auch schon.

daflow
2008-06-19, 14:56:25
Falls Postgres da nicht _die_ Ausnahme bildet, wird sich's wohl so Verhalten wie bei DB2/Oracel/MS-SQL...:

Der Indexname dient lediglich dazu dem Datenbankdesigner/Admin etc. einen Wiedereerkennungswert für den Index zu liefern. Sprich eine gewisse Notationslogik kann anhand des Namens also darauf hinweisen, was der jeweilige Index indiziert. Es besteht auch die Möglichkeit (bei den mir bekannten DBMS) keinen Namen anzugeben, dann generiert das DBMS einen... macht nicht unbedingt Spass dann später danach zu suchen unter hunderten gleichklingenden...

Ob/welcher Index verwendet wird bei einem SQL, entscheidet der "Optimizer" für gewöhnlich anhand von Statistikwerten (es sollten also regelmässig aktuelle Tabellenstatistiken und Tabellen/Indexreorganisationen durchgeführt werden).

Die meissten DBMS bieten die Möglichkeit den Optimizer für einzelne Abfragen oder auch die gesamte DB zu deaktivieren bzw. niedriger zu stellen (was eher in Ausnahmesituationen hilfreich sein kann... die Optimizer der großen Anbieter sind mittlerweile doch gar nichmal sooo dumm).

Edit: Die meissten Datenbankengines liefern auch Features mit denen du dir die Zugriffspläne/Ablaufpläne für SQLs generieren lassen kannst. Dadaurch siehst du genau ob/wann/wo/für was/ Indizes verwendet werden

rotalever
2008-06-19, 15:04:46
Ok dann ist gut, danke für die schnellen Antworten.:smile: Für diese Statistikfunktion muss man bei PostgreSQL immer so ein Analyse Teil regelmäßig laufen lassen, aber das sollte schon klappen.

SgtTynis
2008-06-19, 17:23:42
Manche Datenbanken (z.B. mysql) erlauben wärend der Statements auch einen nutzerspezifischen Zugriff auf die Indexe um dem DBMS bei bestimmten Suchanfragen als "Wissender" unter die Arme zu greifen. Oft hilft dabei ein EXPLAIN um zu sehen, ob die Datenbank auf dem richtigen Weg ist. Falls nicht, kann man mit USE INDEX (index_list), FORCE INDEX (index_list) und IGNORE INDEX (index_list) steuernd eingreifen.

rotalever
2008-06-19, 18:14:01
Naja, das überlasse ich lieber dem Datenbanksystem. Ich glaube da programmieren Leute, die mehr Ahnung davon haben als ich ;)
Jetzt muss ich nur noch herausfinden warum PostgreSQL 10x langsamer connected als MySQL, dann hab ich alles umgestellt.
edit: Okay, das hat sich gelöst.. Einfach pg_pconnect statt pg_connect in PHP nehmen. Okay, es scheint NOCH bessere Alternativen zu geben ;)

ethrandil
2008-06-19, 22:37:58
Nur zur Vollständigkeit: Die meisten SQL Datenbanken unterstützrn analyse-statements, die einen gegebenen Query analysieren und melden, welche Indizes genutzt werden. Die Schlüsselwörter dafür sind aber mehr oder wneiger Herstellerspezifisch.

mfg
- clemens

Gast
2008-06-20, 11:13:54
Indexe? Mir bluten die Augen. Das heißt Indizes!!!

rotalever
2008-06-20, 12:11:03
Indexe? Mir bluten die Augen. Das heißt Indizes!!!
Ja tut mir leid. Für mich sah das auch ein bisschen seltsam aus. Aber zur Beruhigung:

Index [ˈɪndɛks] (von lateinisch „Zeigefinger, Anzeiger, Übersicht, Titel, Inhaltsverzeichnis“), Plural „Indizes“ [ˈɪndit͜seːs] oder seltener „Indexe“, [...]
Wikipedia (http://de.wikipedia.org/wiki/Index)

Auch hier (Plural 2): http://de.wiktionary.org/wiki/Index
Das gebräuchlichere ist aber wahrscheinlich Indizes.

daflow
2008-06-20, 12:22:35
Ja tut mir leid. Für mich sah das auch ein bisschen seltsam aus. Aber zur Beruhigung:

Auch hier (Plural 2): http://de.wiktionary.org/wiki/Index
Das gebräuchlichere ist aber wahrscheinlich Indizes.


Kenne auch zahlreiche DBAs/DB-Entwickler die ständig Indexe sagen, auch wenn ichs persönlich nicht schön finde ;(

Senior Sanchez
2008-06-20, 18:29:05
Indexe? Mir bluten die Augen. Das heißt Indizes!!!

Wenn man keine Ahnung hat, einfach mal....

In der DB-Welt spricht man von Indexen, nicht von Indizes.

Shink
2008-06-20, 20:01:09
Ebenso ist Indizierung z.B. nicht das selbe wie Indexierung.

mapel110
2008-06-20, 20:03:43
Ebenso ist Indizierung z.B. nicht das selbe wie Indexierung.
Ist aber beides richtig. Das eine ist halt laut Wikipedia neu-Denglisch, das andere Deutsch.

rotalever
2008-06-20, 21:10:29
In der DB-Welt spricht man von Indexen, nicht von Indizes.
Dann hab ich das ja intuitiv richtig gemacht:smile:

Gast
2008-06-20, 21:24:46
Ebenso ist Indizierung z.B. nicht das selbe wie Indexierung.

So?

http://de.wiktionary.org/wiki/Indexierung
Indexierung = das Indexieren

http://de.wiktionary.org/wiki/indizieren
Indizieren = Aufnahme in einen Index
Synonym indexieren

Senior Sanchez
2008-06-20, 22:01:03
Dann hab ich das ja intuitiv richtig gemacht:smile:

Japs :)
Ich habs gestern und heute wieder gaaanz oft gehört ;)

Gast
2008-06-21, 10:27:58
Nur weil es irgendwelche Datenbank Proleten es ständig sagen, heißt es noch lange nicht, dass es wirklich richtig ist.

Senior Sanchez
2008-06-21, 10:37:54
Nur weil es irgendwelche Datenbank Proleten es ständig sagen, heißt es noch lange nicht, dass es wirklich richtig ist.

Nur weil es irgendwelche Gast Proleten es ständig sagen, heißt es noch lange nicht, dass es wirklich falsch ist.

Kauf dir mal einen Duden und schau mal unter Index.

Außerdem geht es hier um Datenbanken und demzufolge sollte man sich auch an die üblichen Begriffe halten und das sind eben Indexe.

Gast
2008-06-21, 17:03:38
Nur weil es irgendwelche Gast Proleten es ständig sagen, heißt es noch lange nicht, dass es wirklich falsch ist.

Kauf dir mal einen Duden und schau mal unter Index.

Außerdem geht es hier um Datenbanken und demzufolge sollte man sich auch an die üblichen Begriffe halten und das sind eben Indexe.

Im Deutsch spricht man von Indizes oder Indizierung, auch bei Datenbanken.

Senior Sanchez
2008-06-21, 17:42:06
Im Deutsch spricht man von Indizes oder Indizierung, auch bei Datenbanken.

Na wenn du meinst. :rolleyes:

mapel110
2008-06-21, 17:53:26
Na wenn du meinst. :rolleyes:
Meint Wikipedia ja auch. :rolleyes:

Senior Sanchez
2008-06-21, 18:40:12
Meint Wikipedia ja auch. :rolleyes:

Ich mag Wikipedia, aber an dieser Stelle vertraue ich doch mehr meinen Professoren, die sich denke ich sehr gut mit der Thematik auskennen.

rotalever
2008-06-21, 19:46:03
Ich mag Wikipedia, aber an dieser Stelle vertraue ich doch mehr meinen Professoren, die sich denke ich sehr gut mit der Thematik auskennen.
Naja Professoren reden manchmal aber auch seltsame Sachen.

Gast
2008-06-21, 20:45:10
Ich mag Wikipedia, aber an dieser Stelle vertraue ich doch mehr meinen Professoren, die sich denke ich sehr gut mit der Thematik auskennen.

In jeder dt. Fachliteratur habe ich bisher immer von Indizes für Plural bzw. Indizierung für die Substantivierung gelesen. Vielleicht hat sich ja auch Indexierung neuerdings eingebürgert, das macht aber Indizes bzw. Indizierung in keiner Weise falscher.

Lokadamus
2008-06-21, 20:51:44
In jeder dt. Fachliteratur habe ich bisher immer von Indizes für Plural bzw. Indizierung für die Substantivierung gelesen. Vielleicht hat sich ja auch Indexierung neuerdings eingebürgert, das macht aber Indizes bzw. Indizierung in keiner Weise falscher.mmm...

Das dürfte das Problem sein ;(.

Ist so ähnlich wie der Bullshit von 1KByte = 1000 Byte usw. :(. Das haben wir auch nur solchen Gästen zu verdanken, wie dem Gast auf der anderen Seite ...

Senior Sanchez
2008-06-21, 21:12:48
In jeder dt. Fachliteratur habe ich bisher immer von Indizes für Plural bzw. Indizierung für die Substantivierung gelesen. Vielleicht hat sich ja auch Indexierung neuerdings eingebürgert, das macht aber Indizes bzw. Indizierung in keiner Weise falscher.

Das Indizes und Indizierung falsch ist, hat auch niemand gesagt.
Ich habe lediglich gesagt, dass man bei Datenbanken von Indexen redet und nicht von Indizes.

Und zur Wikipedia... Ein Buch, was sie dort als Quelle angeben, hat mein Datenbank-Prof geschrieben und er benutzt sicher nicht Indizes als Wort.

Senior Sanchez
2008-06-21, 21:13:37
Naja Professoren reden manchmal aber auch seltsame Sachen.

Soll nicht überheblich klingen, aber ich behaupte mal ganz stark, dass mein DB-Prof mehr Ahnung von Datenbanken hat, als sonst jemand in diesem Thread auch nur annähernd haben könnte.

Gast
2008-06-22, 00:09:44
mmm...

Das dürfte das Problem sein ;(.

Ist so ähnlich wie der Bullshit von 1KByte = 1000 Byte usw. :(. Das haben wir auch nur solchen Gästen zu verdanken, wie dem Gast auf der anderen Seite ...
1KByte sind auch 1000 Byte du Depp.
Nichtmal das metrische System kennen, und dann hier rumprollen, also echt...

Lokadamus
2008-06-22, 04:30:17
1KByte sind auch 1000 Byte du Depp.
Nichtmal das metrische System kennen, und dann hier rumprollen, also echt...mmm...

Ich kann es dir nochmal versuchen zu sagen:
KB, kb, Kbyte und ähnliche Abkürzungen waren Anfang der 90er immer 1024Byte.
Der Scheiß mit KByte = 1000 kam erst Ende der 90er auf, weil so Festplatten mit größerer Kapazität beworben werden konnten, als sie haben.
Die Frage, warum 1kB nicht 1000 Byte, sondern 1024 Byte waren, wurden einem auch schnell erklärt (Binäres Problem halt), aber ich denke, das weist du eh alles.
Wenigstens haben wir dank dir das tolle Problem, dass eine 500GB HDD nur ca. 490GB unter Windows anzeigt und die neue Rechtschreibreform. Danke ...

Gast
2008-06-22, 11:02:12
Der Scheiß mit KByte = 1000 kam erst Ende der 90er auf, weil so Festplatten mit größerer Kapazität beworben werden konnten, als sie haben.
Der "Scheiß" mit dem KByte = 1000 kam nicht wegen den Festplattenherstellern auf, sondern weil Kilo nunmal 1000 ist. Diejenigen, die irgendwann mal festgelegt haben, dass 1 KByte = 1024 ist, haben damit ganz fies gegen die SI Präfixnorm verstoßen, und gehören deswegen gehängt.
Zum Glück hat man das mittlerweile bereinigt.
Was du meinst ist KibiByte.

Also 1 KByte = 1000 Byte. Basta!

darph
2008-06-22, 11:09:24
Topic, guys! :cop:

Gast
2008-06-22, 11:55:31
Zum Glück hat man das mittlerweile bereinigt.



Die Binärpräfixe sind aber meiner Meinung nach auch nicht verbindlich, sondern eine Empfehlung. Übrigens könntest du einen anderen Ton anlegen ;)

Gast
2008-06-22, 12:03:35
Ich habe lediglich gesagt, dass man bei Datenbanken von Indexen redet und nicht von Indizes.


Man kann von Indexen und Indizes reden sowie von Indexierung oder Indizierung. Jedem wie es beliebt. Indizes/Indizierung ist aber deutlich älter und gebräuchlicher als die Neuform, auch im Datenbankbereich.