php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.12.2004, 01:59  
Gast
 
Beiträge: n/a
Standard [Erledigt] Elementare Frage: Schneller durch Index? - Bin ratlos!

Ich arbeite lokal auf einem Windows 2000-Rechner, Php 4.3.2, Mysql 3.23.56-nt

Meine Sandkiste ist eine Tabelle namens test mit Angaben über die Files einer Festplatte (ca 600.000 Sätze), Felder sind u.a.:
name (text), pfad (text), size2(int(11)), dattime2(dattime)

Durch Verwendung eines Index möchte ich Abfragen wie
____SELECT * FROM test ORDER BY name, dattime2, size2 LIMIT 30____
oder meinetwegen
____SELECT * FROM test ORDER BY SUBSTRING(name,1,10), dattime2, size2 LIMIT 30____
entscheidend beschleunigen

Also versuche ich
____CREATE INDEX ix_nds ON test (name(10), dattime2, size2)____
Das bringt aber bei erneuter Abfrage wie oben absolut nichts! (phpMyAdmin zeigt die Eigenschaften des Index wie erwartet an)

Kann mir bitte jemand sagen, was ich falsch mache bzw ob ich von falschen Voraussetzungen ausgehe..
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.12.2004, 05:23  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard Re: Elementare Frage: Schneller durch Index? - Bin ratlos!

Zitat:
Zitat von stso
SELECT * FROM test ORDER BY name, dattime2, size2 LIMIT 30
Bei dieser Art Abfrage bringt ein Index nicht so viel. Indizes beschleunigen Suchoperationen, die aber um Grössenordnungen. Hier kann der Index nur für die sage und schreibe drei Sortierungen von 600.000 Elementen genutzt werden... hast Du eine Ahnung, was für ein Aufwand das ist? Auch die besten Sortieralgorithmen haben eine Laufzeitkomplexität von O(n*log n). Kannst Du das nicht irgendwie durch eine WHERE-Klausel einschränken?

Zitat:
Zitat von stso
SELECT * FROM test ORDER BY SUBSTRING(name,1,10), dattime2, size2 LIMIT 30
Und hier hast Du mit dem Aufruf von SUBSTRING den Kardinalsfehler zu Indizes gemacht. Denn die Funktion muss bei jedem Aufruf berechnet werden, im Index stehen tut sie nicht, dementsprechend kann der Index sie nicht beschleunigen. Hier müsstest Du ein eigenes Feld einrichten, wo dieser Teilstring schon drin steht, und dadrauf nen Index legen.

Generell kannst Du dir anzeigen lassen, welche Indizes benutzt werden, indem Du EXPLAIN benutzt, also z.B:
EXPLAIN SELECT * FROM test ORDER BY SUBSTRING(name,1,10), dattime2, size2 LIMIT 30

PS: Es gibt da einen tollen Eintrag in der DCLP-FAQ, der "Warum soll ich nicht 'SELECT * FROM' schreiben" heisst. Hab grad keine Lust, den Link rauszusuchen.
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Notice: Undefined index Kein Genie PHP Tipps 2008 5 23.04.2008 17:40
Prototype Ajax Array Datenmüll notyyy HTML, Usability und Barrierefreiheit 2 08.04.2008 10:57
Array index updaten obi PHP Tipps 2008 4 28.11.2007 15:08
2 verschachtelte while Schleifen. Großes Performanceproblem Datenbanken 3 30.05.2005 12:52
Frage zum Index, Primärschlüssel Datenbanken 1 15.04.2005 01:20
Frage zu Index und Primärschhlüssel Stefano Datenbanken 6 04.11.2004 02:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
substring schneller, programme schneller durch indexierung, mysql sortieren durch index beschleunigen, warum indizes schneller, elementare mit 2 index, order by teilstring, schnelle datenbank durch index, bin ich im google index, mysql index substring, php substr datenmüll, indizes schneller, elementare frage, mysql beschleunigen durch index

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.