| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Was sagt ein EXPLAIN auf dem Statement? Sofern die FK-Tabelle einen Primary-Index auf beiden Feldern hat, sollte das JOIN verdammt schnell sein.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | ||
| Neuer Benutzer Registriert seit: 14.03.2010
Beiträge: 11
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
Der Explain den mir phpMyAdmin ausgibt: hier klicken (hab das Bild mal verlinkt, da es mit 970px recht breit ist) Geändert von Spider (15.03.2010 um 09:44 Uhr). | |
| | |
| | |
| Gast
Beiträge: n/a
| Der EXPLAIN sieht eigentlich gut aus. MySQL findet viele passende Indices um die Abfrage performant ausführen zu können. Siehe Spalte "KEY". Die Anzahl der Zeilen in "ROWS" ist minimal. Da läßt sich nicht viel optimieren. Bleibt die generelle Fragen, ob Du das Datenmodell umstellen möchtest, falls Dir obiger SQL nicht gefällt (und das kann ich gut verstehen). Meine überarbeitete Tabelle dazu: Code: CREATE TABLE tipps_neu( id INT NOT NULL, user_id INT NOT NULL, rennen_id INT NOT NULL, fahrer_id INT NOT NULL, position_nr INT NOT NULL, // getippte Position 1..x poleposition_id INT NOT NULL, // fahrer_id in der Poleposition schnellste_runde_id IN NOT NULL, // fahrer_id der schnellsten Runde PRIMARY KEY (id) ) Nein, die Tabelle ist nicht gut so. poleposition und schnelleste_runde sind falsch.. Spontane Idee wäre Code: CREATE TABLE tipps_neu( id INT NOT NULL, user_id INT NOT NULL, rennen_id INT NOT NULL, fahrer_id INT NOT NULL, tipp_typ_id INT NOT NULL, // 1..x getippte Position 1..x, 100 = Poleposition, 101 = schnelleste Runde PRIMARY KEY (id) ) Thomas Geändert von thomas_w (15.03.2010 um 10:13 Uhr). |
|
| | |
| Neuer Benutzer Registriert seit: 14.03.2010
Beiträge: 11
PHP-Kenntnisse: Fortgeschritten ![]() | Hmm, ich weis nicht. Wie gesagt, prinzipell leutet mir das schon ein. Aber ich bin mir nicht wirklich sicher ob das so wirklich effektiv ist. Immerhin verzehnfacht diese Art die Anzahl Datensätze. Rechnen wir pauschal mal mit 200 Tippern, macht das 200 x 19 Rennen x 10 Datensätze = 38.000 Auf der anderen Seite steht halt diese große SQL-Wurst. Ich werde das Local mal zusammen bauen und beide Abfrage mal durch den Apache Benchmark schicken. Mal schauen was dabei rauskommt. Auf jedenfall erstmal Danke für Deine Ratschläge ![]() |
| | |
| | ||
| Gast
Beiträge: n/a
| Zitat:
Code: CREATE TABLE rennen_2 ( id INT NOT NULL, user_id INT NOT NULL, rennen_id INT NOT NULL, fahrer_id INT NOT NULL, tipp_typ_id INT NOT NULL, PRIMARY KEY(id) ); CREATE TABLE rennen_1 ( id INT NOT NULL, user_id INT NOT NULL, rennen_id INT NOT NULL, fahrer1 INT NOT NULL, fahrer2 INT NOT NULL, fahrer3 INT NOT NULL, fahrer4 INT NOT NULL, fahrer5 INT NOT NULL, fahrer6 INT NOT NULL, fahrer7 INT NOT NULL, fahrer8 INT NOT NULL, fahrer9 INT NOT NULL, fahrer10 INT NOT NULL, polepos INT NOT NULL, schnellste_runde INT NOT NULL, PRIMARY KEY(id) ); INSERT INTO rennen_2 VALUES (1 , 1, 1, 1, 1); INSERT INTO rennen_1 VALUES (1 , 1, 1, 1, 1, 1 , 1, 1, 1, 1, 1 , 1, 1, 1, 1); myslq>SHOW TABLE STATUS LIKE 'rennen%' rennen_1 = avg_row_length = 63 rennen_2 = avg_row_length = 21 200 x 19 x 63 = 239.400 Byte 200 x 19 x 12 x 21 = 957.600 Byte Der größte Vorteil dürfte die Flexibilität sein. Wenn also nicht nur Fahrer 1..10, Poleposition und schnellste Runde, sondern vielleicht 8 Fahrer, Poleposition und die 2-schnellste Runde getippt werden soll. Aber probieren geht natürlich über studieren! Viel Erfolg! Grüße Thomas | |
|
| | |
| Neuer Benutzer Registriert seit: 14.03.2010
Beiträge: 11
PHP-Kenntnisse: Fortgeschritten ![]() | Das ist in der Tat ein schlagendes Argument. Rein vom Benchmark her nehmen sich beide nichts. Habe die Querys je 1000 mal in einer FOR-Schleife laufen lassen, bei jeweils 10.000 Scriptaufrufen. Meine bisherige Tabellenkonstruktion brauchte dazu 32.613 Sekunden, die von thomas_w 32.108 Sekunden. Beide InnoDB mit den entsprechenden Fremdschlüsseln und den jeweils gleichen Werten. Da man ja flexibel bleiben möchte, werde ich dann wohl mal umstellen. |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Intertabellarische Berechnungen, wie? | dave303 | Datenbanken | 13 | 05.03.2010 11:58 |
| Referenzen von eine Tabelle in die andere Kopieren | wali | PHP Tipps 2009 | 3 | 13.01.2010 21:53 |
| MY-SQL Abfrage nach Daten aus Tabelle 1 die in Tabelle 2 nicht vorhanden sind | triple81 | Datenbanken | 1 | 25.12.2009 22:46 |
| Bestehende php /Myqsl Tabelle Neben einander aus geben | Totti-Totti | PHP Tipps 2009 | 3 | 21.12.2009 11:00 |
| Bilder in Tabelle einfügen Mysql oder direkt?! | DKuhn | PHP Tipps 2009 | 3 | 30.09.2009 10:14 |
| tabelle 2 in tabelle 1 updaten | steffen_dk | Datenbanken | 11 | 04.07.2009 15:04 |
| Zeilenanzahl einer tabelle mit WHERE aber ohne schleife? | sovereign | Datenbanken | 13 | 17.04.2006 20:34 |
| [Erledigt] Problem mit dem Füllen einer Tabelle über Formular | PHP Tipps 2006 | 18 | 10.01.2006 12:51 | |
| [Erledigt] Problem mit Anzeige einer Tabelle mit dem Firefox? | HTML, Usability und Barrierefreiheit | 8 | 28.11.2005 15:08 | |
| Tabelle aktualisieren | Datenbanken | 3 | 23.11.2005 09:54 | |
| Problem mit mySQL | Datenbanken | 7 | 27.09.2005 12:06 | |
| mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert | Datenbanken | 2 | 08.09.2005 11:59 | |
| tabelle in tabelle ohne aussenrand | noskule | HTML, Usability und Barrierefreiheit | 6 | 25.08.2005 14:17 |
| [Erledigt] Tabelle in Tabelle ausrichten | HTML, Usability und Barrierefreiheit | 7 | 03.01.2005 14:32 | |
| [Erledigt] HILFE: Column count doesn't match value count at row 1 | Datenbanken | 17 | 12.06.2004 16:45 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| fk datenbanken, formel 1-rennausgang, datenbanken fk, formel 1rennausgang, schnellstes join 1:1, reine tabelle, nickname leuchten lassen html php code? |