mmofacts.com

Explain Anweisung

gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
Hi^^

kann mir jemand erkären wie das mit der Explain anweisung funktioniert?
Also hab das handbuch von mysql im internet gelesen, da steht dass ich durch das explain sehn kann wo ich am besten den index setz. aber bei meiner anweisung gibt er nichts aus. Funktioniert das nur mit joins oder auch ohne?

hier mal meine anweisung.
$query = mysql_query("EXPLAIN SELECT dune_gefuege");

gepostet vor 18 Jahre, 7 Monate von HSINC
ich sags nur ungern, aber das ist keine komplette select anweisung. da fehlt zumindest noch nen from table. insofern kann die sache net funzen
gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
ja schon klar. habs ja mit alle möglichen versuchen schon probiert. trotzdem kommt nix bei raus.

$query = mysql_query("EXPLAIN SELECT user FROM dune_einheiten");

gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
ja ach ne. was schreib ich denn? ich habs doch gelesen trotzdem funzt es nich! deswegen frag ich ja hier obs mir jemand besser erklärn kann......
gepostet vor 18 Jahre, 7 Monate von Macavity
wieso wird immer etwas gefragt, was lang und breit in der doku steht?

ach es gibt ne doku? :lol:
gepostet vor 18 Jahre, 7 Monate von Drezil
da steht doch sogar explizit nen beispiel:
 Angenommen, Sie haben unten stehendes SELECT-Statement, das Sie mit EXPLAIN untersuchen:


EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,
tt.ProjectReference, tt.EstimatedShipDate,
tt.ActualShipDate, tt.ClientID,
tt.ServiceCodes, tt.RepetitiveID,
tt.CurrentProcess, tt.CurrentDPPerson,
tt.RecordVolume, tt.DPPrinted, et.COUNTRY,
et_1.COUNTRY, do.CUSTNAME
FROM tt, et, et AS et_1, do
WHERE tt.SubmitTime IS NULL
AND tt.ActualPC = et.EMPLOYID
AND tt.AssignedPC = et_1.EMPLOYID
AND tt.ClientID = do.CUSTNMBR;
gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
ja ach ne. aber da steht nich was der ausgeben soll dann und wird. da steht auch nich ob das nur bei joins geht und da steht auch nich ob man die inhalte der spalten ausgeben muss und wie das funzt das überhaupt was angezeigt wird was man am besten indizieren soll.

wenn ich das ohne joins mach dann wird nämlich gar nix angezeigt. un deshalb frag ich ja.
gepostet vor 18 Jahre, 7 Monate von Kampfhoernchen
Ein WHERE, ORDER BY tut es auch. Bei mir jedenfalls.
gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
Original von Kampfhoernchen
Ein WHERE, ORDER BY tut es auch. Bei mir jedenfalls.


hm. ja damit hab ichs schon ausprobiert. aber was soll die Explain dann ausgeben? Also im bezug auf die beste indizierung.

$query = mysql_query("EXPLAIN SELECT user FROM dune_einheiten WHERE user='$user' && x='$x' && y='$y'");

gepostet vor 18 Jahre, 7 Monate von Drezil
probioers mit lesen..

Die Ausgabe von EXPLAIN enthält folgende Spalten:
  • table

  • Die Tabelle, auf die sich die Ausgabezeile bezieht.
  • type

  • Der Join-Typ. Informationen über die verschiedenen Typen finden Sie weiter unten.
  • possible_keys

  • Die possible_keys-Spalte gibt an, [...]
  • key

  • Die key-Spalte gibt den Schlüssel an,[...]
  • key_len

  • Die key_len-Spalte gibt die Länge des Schlüssels[...]
  • ref

  • Die ref-Spalte zeigt an, welche Spalten oder Konstanten beim key benutzt werden, um Zeilen aus der Tabelle auszuwählen.
  • rows

  • die rows-Spalte gibt die Anzahl von Zeilen an, von denen MySQL annimmt, dass es sie untersuchen muss, um die Anfrage auszuführen.
  • Extra

  • Diese Spalte enthält zusätzliche Informationen darüber, wie MySQL die Anfrage auflösen wird. Folgende unterschiedliche Text-Zeichenketten können in dieser Spalte stehen:
    [...]


    Und unten das ganze nochmal am beipiel en detail erklärt..
    gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
    trotzdem funzts bei mir nich. wie wärs du schreibst einfach kurz den code wie er bei meinem beispiel aussehn würde. un zwar ohne joins. und dass es mal was ausgibt. den bei mir gibt das explain nie was aus.
    gepostet vor 18 Jahre, 7 Monate von Drezil
    //sql erst verbinden
    
    $qry = mysql_query("EXPLAIN ");
    if ($row = mysql_fetch_assoc($qry)) {
    print_r($row);
    while ($row = mysql_fetch_assoc($qry)) {
    print_r($row);
    }
    } else {
    echo mysql_error();
    }

    hab ich nicht getestet, sondern in 2 min geschrieben. Ist also nur so hingeklatscht.. könnte man besser machen - hab ich aber jetzt kein bock zu
    sollte imho jeder selbst können, der im "fortgeschrittenen"-Forum schreibt.
    gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
    thx. bei meiner anweisung wurde nur die werte ausgegeben oder die wörter dazu. und damit konnte ich nix anfangen. jez klappts.
    gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
    Nur noch eine Sache:

    Warum will mysql meistens nur 1 index verwenden? dann sind ja die anderen indexe überflüssig.
    gepostet vor 18 Jahre, 7 Monate von Kampfhoernchen
    Man sollte sich nicht 100% auf Explain verlassen. Gesunder Menschenverstand ist da meist zuverlässiger.
    gepostet vor 18 Jahre, 7 Monate von mifritscher
    Original von pHoEnIx-sTyLe

    Warum will mysql meistens nur 1 index verwenden? dann sind ja die anderen indexe überflüssig.

    Soll angeblich in einer späteren mysql-Version besser werden
    gepostet vor 18 Jahre, 7 Monate von pHoEnIx-sTyLe
    hmm. die sache ist dass mysql mir bei den Laufzeit-Informationen anzeigt ich hätte falsche verknüpfungen was darauf hinweist dass ich die indexe falsch gesetzt hab oder keine vorteile daraus ziehen kann.

    wär es dann sinnvoll die anderen indexe zu entfernen die mysql nicht benutzen wird?

    Auf diese Diskussion antworten