Mailinglisten-Archive |
Hallo Wolf(gang), mein e-mail Programm hat es mal wieder versemmelt und Dir die Antwort zunächst als Pers.-Mail anstatt per Liste zukommen lassen. Damit die Liste auch etwas davon hat habe ich unsere bisherigen Mails unten an den Text angehängt. > -----Original Message----- > From: Wolfgang Steinhauer [mailto:wolf at earthway.org] > Das habe ich gemacht. Als Ergebnis kam das: > > table | type | possible_keys | > key | key_len | ref | rows | Extra > insekt_adress_to_arten | ALL | NULL | NULL > | NULL | NULL | 656 | > insekt_adress_to_bundesland | ref | bundesland_id | bundesland_id | > 4 | const | 4 |where used > insekt_adress | ALL | PRIMARY | NULL > | NULL | NULL | 270 | aufgrund des Umbruches extrem schwer zu lesen. Aber eine Richtung ist erkennbar. > > Wieso sagt er beim ersten Table possible_keys = NULL ? > Der Table hat drei Felder, einen auto_increment mit primary-key uns zwei > indexen....... Evtl. sollte man die Bedingung zur Auswahl der Zeilen der ersten Tabelle nicht in den left join sondern in das Where-Statement packen, das macht das Ganze dann auch übersichtlicher. Für weitere Diskussionen ist es evtl. sinnvoll, daß Du die (evtl gekürzten) Create-Table/Index statements der Tabellenstrukturen postest. > > Was hat es bei MySql eigentlich mit "Kardinalitaet" auf sich ? > Ja, gibt es :). Kardinalität bewertet ja die Qualität eines Indexes. Viele gleiche Werte in einem Index geben eine niedrige Kardinalität und verringern die Wahrscheinlichkeit, daß der Index für eine Query von MySql verwendet wird. Z.B. Ein Index auf ein Feld, daß nur Ja/Nein Werte (1/0) enthält, wird wahrscheinlich nie verwendet. Es gibt auch einen Aufruf, um die Index-Statistiken für eine Tabelle zu aktualisieren (weiß ich aber nicht auswendig -> siehe Handbuch). Gruss, Michael Donning ---------------------------------------------------------------------------- ---------------------------------------------- so hier wie oben angedroht die Wiederholung für die Liste: meine erste Antwort: Hallo Wolf(gang), > -----Original Message----- > From: Wolfgang Steinhauer [mailto:wolf at earthway.org] > habe derzeit ein kleines Problem mit einen SQL-Statement ueber drei Tables > mit sechs Vergleichen: >... Stell mal das Wörtchen "Explain" oder "Describe" vor Dein Statement. Dann zeigt MySql seinen Suchfindungsweg an. Insbesondere welche Indizes benutzt (und welche nicht benutzt) werden. Generell kann man sagen auf jedes Feld auf das man einen Vergleich anstellt ist es u.U. sinnvoll einen Index zu setzen evtl. auch als Komibination von Feldern. Tödlich für die Performance allerdings sind Abfragen wie "%wert%". Denn dort greift kein Index. Evtl. sollte man dort überlegen nur am Feldbeginn zu suchen ( like '$eingabe%") und die komplett freie Suche %wert% nur bei Nichterfolg nachzuschalten. Gruss Michael Donning ---------------------------- und Deine Antwort (komplett): Hallo Michael, > Stell mal das Wörtchen "Explain" oder "Describe" vor Dein Statement. Dann > zeigt MySql seinen Suchfindungsweg an. Insbesondere welche Indizes benutzt > (und welche nicht benutzt) werden. Das habe ich gemacht. Als Ergebnis kam das: table | type | possible_keys | key | key_len | ref | rows | Extra insekt_adress_to_arten | ALL | NULL | NULL | NULL | NULL | 656 | insekt_adress_to_bundesland | ref | bundesland_id | bundesland_id | 4 | const | 4 |where used insekt_adress | ALL | PRIMARY | NULL | NULL | NULL | 270 | Wieso sagt er beim ersten Table possible_keys = NULL ? Der Table hat drei Felder, einen auto_increment mit primary-key uns zwei indexen....... Was hat es bei MySql eigentlich mit "Kardinalitaet" auf sich ? > Generell kann man sagen auf jedes Feld auf das man einen Vergleich anstellt > ist es u.U. sinnvoll einen Index zu setzen evtl. auch als Komibination von > Feldern. Ich setze generell einen Index auf alle Felder in denen Gesucht werden soll...... > Tödlich für die Performance allerdings sind Abfragen wie "%wert%". Denn dort > greift kein Index. Evtl. sollte man dort überlegen nur am Feldbeginn zu > suchen ( like '$eingabe%") und die komplett freie Suche %wert% nur bei > Nichterfolg nachzuschalten. Das ist mir schon klar.... nur leider geht es in diesem Fall nicht anders.... Ich kann nicht alle Regierungsbezirke und Staedte von Deutschland, Oesterreich, Schweiz, Holland, Luxemburg und Lichtenstein in Tables packen...... Also werden sie einfach in einem Textfeld gespeichert - mit dem Nachteil der unterschiedlichen Schreibweise.... hast Du sonst noch irgendwelche Ideen dazu ? Liebe Gruesse, wolf -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive