SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #21  
Alt 12.03.2011, 19:27:39
Myribo Myribo ist offline
Anfänger
 
Registriert seit: Nov 2005
Beiträge: 19
AW: Bräuchte Hilfe mit... Indizes (?)

In der Tat!
Die Abfragen gehen nun mit dem "idx_quick" schon ein wenig schneller. Leider sind das in der Regel aber immer noch ca. 1,5 Sekunden (und das bei -relativ- wenigen Daten...)

EXPLAIN SELECT mit "idx_quick":

Code:
mysql> EXPLAIN SELECT quicknodes, quickamenity, quickleisure, quickhighway, quickbuilding, quicklanduse, quickname, quicklevel
    ->   FROM ways w1
    ->   JOIN ( SELECT id FROM ways  
    ->           WHERE maxlon > 7.61655923529412 
    ->             AND minlon < 7.63538276470588 
    ->             AND maxlat > 51.9546756470588 
    ->             AND minlat < 51.9664403529412 ) w2
    ->     ON w1.id = w2.id
    -> 
    -> WHERE w1.quickamenity = 'parking' 
    ->    OR w1.quickhighway <> '' 
    ->    OR w1.quicklanduse = 'forest'
    ->    OR w1.quickbuilding = 'yes'
    -> 
    -> ORDER BY w1.quicklevel ASC;
+----+-------------+------------+--------+-------------------+-------------+---------+-------+-------+---------------------------------+
| id | select_type | table      | type   | possible_keys     | key         | key_len | ref   | rows  | Extra                           |
+----+-------------+------------+--------+-------------------+-------------+---------+-------+-------+---------------------------------+
|  1 | PRIMARY     | <derived2> | ALL    | NULL              | NULL        | NULL    | NULL  |   755 | Using temporary; Using filesort | 
|  1 | PRIMARY     | w1         | eq_ref | PRIMARY,idx_quick | PRIMARY     | 4       | w2.id |     1 | Using where                     | 
|  2 | DERIVED     | ways       | range  | idx_min_max       | idx_min_max | 8       | NULL  | 99064 | Using where; Using index        | 
+----+-------------+------------+--------+-------------------+-------------+---------+-------+-------+---------------------------------+
3 rows in set (0.88 sec)
Schönen Gruß!
Mit Zitat antworten
  #22  
Alt 12.03.2011, 19:38:15
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Bräuchte Hilfe mit... Indizes (?)

Zitat:
Zitat von Myribo Beitrag anzeigen
In der Tat!
Die Abfragen gehen nun mit dem "idx_quick" schon ein wenig schneller. Leider sind das in der Regel aber immer noch ca. 1,5 Sekunden (und das bei -relativ- wenigen Daten...)

EXPLAIN SELECT mit "idx_quick":
Nun ja, der EXPLAIN zeigt (siehe Spalte "key") das der neue Index "idx_quick" nicht verwendet wird, sondern der Primary Key. Der Index "idx_quick" kann wieder entfernt werden.

Die Frage ist, ob die SQL-Abfrage so sein muss wie sie gerade ist. Ich kenne mich mit dem Thema nicht aus. Das Problem sind die WHERE .. OR .. OR .. OR .. Prädikate. Die lassen sich nicht oder kaum tunen, insbesondere weil sie hier eine sehr kleine Kardinalität haben.

Ich denke an das Problem muss man irgendwie anderst herangehen.

Wenn 1,5 Sekunden zu viel sind. Was wäre Deiner Meinung nach akzeptabel?

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #23  
Alt 12.03.2011, 20:00:49
Myribo Myribo ist offline
Anfänger
 
Registriert seit: Nov 2005
Beiträge: 19
AW: Bräuchte Hilfe mit... Indizes (?)

Okay, dann muss es wohl eine nette Phase (bzw. vorher schlechte) meines Rechners gewesen sein. Auf jeden Fall sind die 1,5 Sekunden relativ konstant.

Natürlich ist das Ganze im Moment noch sehr experimentell, aber die Grundidee des ganzen Projekts ist, eine Navigationslösung für das Auto zu programmieren/bauen.
Basieren werden die Daten eben auf der OSM, bzw. der Datenbank.

1,5 Sekunden sind 'zu viel', wenn man an eine mitscrollende Karte mit der eigenen Position denkt (GPS Empfänger ansteuern usw. - ist aber nen anderes Thema...), aber da muss man sich eben was für überlegen (z.B. größeren Bereich als sichtbarer Bereich zeichnen, dann eben alle paar Sekunden aktualisieren lassen - auch ein anderes Thema...). Du hast ja auch schon geschrieben, man müsse da evtl. nochmal drüber nachdenken. Aber ein enormer Fortschritt zu vorher ist schonmal zu verzeichnen!


Auf jeden Fall möchte ich mich ganz herzlich bei Dir für deine Hilfe und Mühe bedanken - es hat ja auf jeden Fall etwas gebracht!
Bei Interesse werde ich natürlich gerne berichten, sobald es nennenswerte Fortschritte gibt.

Schönen Gruß und schönes Wochenende,
Myribo

// EDIT: Falls Du mal schauen magst - im Moment sieht das Ganze so aus: http://img3.imageshack.us/img3/4230/osmrenderer.jpg

Geändert von Myribo (12.03.2011 um 20:12:05 Uhr)
Mit Zitat antworten
  #24  
Alt 13.03.2011, 13:11:13
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Bräuchte Hilfe mit... Indizes (?)

Ja, dass sieht schon interessant aus. Aber nochmal zurück auf die 1,5 Sekunden. Der EXPLAIN sagt, dass er in dem Subselect

Code:
..
    ->   JOIN ( SELECT id FROM ways  
    ->           WHERE maxlon > 7.61655923529412 
    ->             AND minlon < 7.63538276470588 
    ->             AND maxlat > 51.9546756470588 
    ->             AND minlat < 51.9664403529412 ) w2
..
so um die 100.000 Datensätze durcharbeiten muss. So gesehen, ist 1,5 Sekunden nicht schlecht. Wie gesagt, kannst Du die Datenmenge hier nicht irgendwie verringern?

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #25  
Alt 13.03.2011, 13:59:54
Myribo Myribo ist offline
Anfänger
 
Registriert seit: Nov 2005
Beiträge: 19
AW: Bräuchte Hilfe mit... Indizes (?)

Zitat:
Zitat von thomas_w
Wie gesagt, kannst Du die Datenmenge hier nicht irgendwie verringern?
Gehe ich richtig in der Annahme, dass du die Anzahl der Zeilen in der Tabelle 'ways' meinst?
Hm, ja - da kann man sicherlich noch einiges machen. Bis jetzt umfasst sie alle "Wege" der OSM. Also nicht nur alle Straßen und Wege, sondern auch Polygone (wie z.B. Waldstücke, Gebäude oder Parkplätze), bzw. generell alle Pfade (von der Stromleitung bis zur Landebahn).
(Bei Interesse: http://wiki.openstreetmap.org/wiki/DE:Map_Features)

Da kann/muss man sicherlich ansetzen und einiges herauswerfen.
Das werde ich in der nächsten Woche mal in Angriff nehmen und sicherlich wird dadurch die Datenmenge deutlich verringert. Aber momentan stehen in der Datenbank auch nur die Daten von Münster. Die Datenmenge erhöht sich später drastisch, sobald man ganze Länder in die Datenbank schreibt. Dann wird sich auch zeigen, wie lange die Abfragen im Endeffekt dauern.

Sobald ich mit der Filterung der Daten durch bin, werde ich erstmal berichten.

Schönen Gruß!
Mit Zitat antworten
  #26  
Alt 13.03.2011, 15:15:14
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Bräuchte Hilfe mit... Indizes (?)

Zitat:
Zitat von Myribo Beitrag anzeigen
Gehe ich richtig in der Annahme, dass du die Anzahl der Zeilen in der Tabelle 'ways' meinst?
Im Prinzip meine ich schon den Inhalt der Tabelle ways, aber explizit die Anzahl der Datensätze, die im ersten SubSelect (siehe 3. Zeile im EXPLAIN) verarbeitet werden ( siehe Spalte "rows" )

Code:
+----+-------------+------------+--------+-------------------+-------------+---------+-------+-------+---------------------------------+
| id | select_type | table      | type   | possible_keys     | key         | key_len | ref   | rows  | Extra                           |
+----+-------------+------------+--------+-------------------+-------------+---------+-------+-------+---------------------------------+
|  1 | PRIMARY     | <derived2> | ALL    | NULL              | NULL        | NULL    | NULL  |   755 | Using temporary; Using filesort | 
|  1 | PRIMARY     | w1         | eq_ref | PRIMARY,idx_quick | PRIMARY     | 4       | w2.id |     1 | Using where                     | 
|  2 | DERIVED     | ways       | range  | idx_min_max       | idx_min_max | 8       | NULL  | 99064 | Using where; Using index        | 
+----+-------------+------------+--------+-------------------+-------------+---------+-------+-------+---------------------------------+
Werden in dem SubSelect w2

Code:
..
    ->   JOIN ( SELECT id FROM ways  
    ->           WHERE maxlon > 7.61655923529412 
    ->             AND minlon < 7.63538276470588 
    ->             AND maxlat > 51.9546756470588 
    ->             AND minlat < 51.9664403529412 ) w2
..
die Eckkoodinaten abgefragt? Generell schon eine spannende Sache. Da könnte man sich einen eigenen Routenplaner basteln.

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #27  
Alt 13.03.2011, 17:22:52
Myribo Myribo ist offline
Anfänger
 
Registriert seit: Nov 2005
Beiträge: 19
AW: Bräuchte Hilfe mit... Indizes (?)

Die Anpassung ging doch recht schnell. Mit einer kleinen Testmap bin ich zu dem Ergebnis gekommen, dass nach dem Herausfiltern der nicht relevanten Wege aber immernoch ca. 81% übrig bleiben. Nimmt man aus den gesamten Wegen die unwichtigen und zudem noch die Fußwege heraus, bleiben noch 53% der Daten übrig. Ich habe das Optimierungsprogramm dementsprechend geändert, dass die unwichtigen Wege (Zeilen) gelöscht werden. Am Beispiel Münster habe ich das aber noch nicht getestet.

Zitat:
Zitat von thomas_w
Werden in dem SubSelect w2 [...] die Eckkoodinaten abgefragt?
Richtig - das Renderprogramm bildet für den Query die entsprechenden Kriterien (max*,min*) für die Wege, die im sichtbaren Bereich des aktuellen Kartenausschnits liegen.

Und wie Du bereits erwähnt hast, strebe ich an, das Ganze in der Tat zu einer Routenplanungssoftware zu entwickeln, die auch Verwendung im Auto (Festeinbau) finden kann.

Schönen Gruß!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hilfe, Hilfe, Hilfe adoganay Support 1 08.02.2010 09:05:08
Bräuchte mal Hilfe Psyder PHP Grundlagen 1 30.09.2009 17:58:36
Query/DB-Optimierung Phaltôn MySQLi/PDO/(MySQL) 14 21.12.2008 00:56:36
bräuchte mal kurz hilfe Fabian85 MySQLi/PDO/(MySQL) 15 27.03.2005 09:52:30
Help!!! Hilfe!!! Presster PHP Grundlagen 1 16.12.2004 21:28:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:42:50 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt