zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Ernsthafte Fragen zu MySQL und seiner Indizierung

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 23.01.2008, 16:23
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 15.11.2006
Beiträge: 9
KartoffelKiffer befindet sich auf einem aufstrebenden Ast
Standard Ernsthafte Fragen zu MySQL und seiner Indizierung

Hallo,

ich nutze MySQL schon eine Weile, und bin auch sehr zufrieden damit. Jetzt geht es langsam ans Eingemachte, nämlich der MySQL und Indizierung von Spalten.

Natürlich habe ich mich im Internet hinreichend informiert, nur bleiben einige Fragen dennoch offen. Ich stelle jetzt einfach mal eine Liste von Fragen auf, die mir im Kopf herumschwirren.

1.) Die größte Frage überhaupt: Wie speichert MySQL seine Indizierung ab? Wie ich gelesen habe, sind es Hashwerte, die zur eindeutigen Identifizierung dienen.

2.) Wie groß ist der Streuwert dieser Hashwerte?

3.) Frage 2 hat einen Hintergedanken. Und zwar geht es um die Funktion "LIKE". Indiziere ich eine Spalte "Mitteilung", welche vom Typ VARCHAR ist und 255 Zeichen lang sein kann und darauf einen Index lege. Kreiere ich nun eine Anweisung 'SELECT Mitteilung FROM Mitteilungen WHERE Mitteilung LIKE "Irgendein Text%"', greift dann die Indizierung dennoch? Wenn ich mir einen Hashwert vorstelle, der 32 Zeichen lang ist, der Streuwert dieser Hashfunktion nun enorm ist, sodass wenn ein Bit anders gesetzt ist, der komplette Hash völlig different zum Vorgänger aussieht, so kann ich mir einen Vergleich nicht vorstellen.

Man nehme MD5. Ich speichere "Dies ist ein Test" in MD5 ab, heraus kommt "6cddeb6a2f0582c82dee9a38e3f035d7". Suche ich nun nach "Dies ist%", also einer Zeichenkette "Dies ist" und darauffolgendem Text, der irrelevant ist, so erhalte ich "1759ed07e43fad6f7077d52482750252". Also einem völlig anderen Ergebnis, welches schier nicht verglichen werden kann.

4.) Meine Vermutung lautet also, MySQL nutzt eigene, intelligente Hashfunktionen, die einen geringen Streuwert aufweisen, um so etwaige ähnliche, oder teilstring-behaftete Werte ausfindig zu machen (sofern ein Index auf ein Feld mittels LIKE überhaupt greift).

5.) In eine ähnliche Richtung geht auch meine folgene Frage: Was ist, wenn ich ein Datumsfeld indiziere. Und ich alle Datensätze älter als 01-01-2007 haben möchte, also < 01-01-2007. Greift da ebenfalls die Indizierung? Es würde von einer Eingabe ein Hash gebildet werden (01-01-2007) und mit einer Anzahl n aus der Datenbank verglichen werden.

6.) Global gesprochen: Greift ein Index bei Anweisungen, die nicht dem "="-Operator entsprechen (wie z.B. <, >, <>, LIKE etc.)?

7.) Wenn ich eine Abfrage habe, mit mehreren WHERE-Bedingungen. Wäre es sinnvoll für diese (vielleicht eine signifikante) Abfrage einen eigenen Index zu erstellen? Als Beispiel, ich möchte einen Datensatz mit einem bestimmten Wert und einem bestimmten Zeitraum ermittelt haben (WHERE Wert="abcdefg" AND Time < NOW()), wäre es klug einen Index anzulegen, über die Spalten "Wert" und "Time"? So würde doch explizit eine Indizierung über die beiden Spalten erfolgen, also auch explizit eine geringe (oder überhaupt nur eine) Menge ausgeben werden (die Menge, die dem Wert und dem Zeitraum entsprechen)?

8.) Ist es möglich tabellenübergreifend Indizes zu erstellen? Gesetz dem Fall, dass meine Behauptung, die in Punkt 7 gestellt wurde, wahr ist (also dass die Indizierung über mehrere Spalten für spezielle Abfragen Pluspunkte bringt), ich Indizes erstellen kann, die über Tabelle1.Spalte1, Tabelle1.Spalte2 und Tabelle2.Spalte1 gehen?

Es tut mir leid, wenn das hier alles etwas viel erscheint. Aber das sind im Moment Punkte, die mir als Dorn im Auge erscheinen. Viel Text finde ich darüber leider nicht im Internet, weshalb ich noch etwas im Dunklen stehe.

Ich hoffe es nimmt sich jemand meinen Fragen an.




Mfg Tom
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 25.01.2008, 23:52
Glühend, brennend Rot
XHTMLforum-Mitglied
 
Registriert seit: 12.08.2006
Ort: Riehen
Beiträge: 152
Wasili befindet sich auf einem aufstrebenden Ast
Standard

Ich gehe stark davon aus, dass MySQL den Index seperat zum Wert speichert. Das heisst, wenn du direkt nach dem Vollständigen Wert suchst (=), er diesen, sofern die Spalte ein Index ist, verhasht und nach dem Hash sucht. Solltest du andere Dinge wollen, zum Beispiel suchanfragen, so wird MySQL wohl die "Klartext-Werte" durchsuchen.

Etwas anderes macht - in meinen Augen - keinen Sinn. Sortieren wird wohl entweder anhand der Klartext-Werte geschehen, oder anhand vorsortierter Hash-Stellungsnummer-Kombination.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 26.01.2008, 01:36
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Indizierung hat mit Hashwerten nun mal gar nichts zu tun.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
FAQ -- Häufig gestellte Fragen und häufig gegebene Antworten mazzo CSS 10 05.04.2012 18:32
Fragen über Fragen jules CSS 5 09.10.2008 16:21
Alternativen zur Nutzung von (My)SQL? domsson Serveradministration und serverseitige Scripte 4 06.04.2008 23:06
MySQL Query - online ok, lokal kein Ergebnis? Boris Serveradministration und serverseitige Scripte 6 05.09.2007 00:51
utf8 Fragen und Probleme lewian (X)HTML 11 07.09.2005 02:47


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:28 Uhr.