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 ::

Webseiten professionell erstellen

Webseiten professionell erstellen 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)
Hilfe Community Kalender Heutige Beiträge Suchen

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

 
 
Themen-Optionen Ansicht
  #12  
Alt 03.11.2010, 23:26:38
droehn droehn ist offline
Anfänger
 
Registriert seit: Oct 2010
Alter: 51
Beiträge: 19
AW: COUNT mit JOINs und sub-queries kriechend langsam

Für Interessierte:

Die Performance liess sich nochmal deutlich steigern, indem ich dem COUNT Statement ein LIMIT 0,30 spendierte. Ich kann es mir nicht erklären, welchen Einfluss LIMIT hier nimmt, aber der Query spuckt tatsächlich die korrekte Anzahl von 61'271 Datensätzen aus und wir sind neu bei 2,2 Sekunden.

Anbei der letzte EXPLAIN:
Code:
+----+--------------------+-------+--------+------------------------------------------+-------------------------+---------+--------------------------------------------------+-------+--------------------------+
| id | select_type        | table | type   | possible_keys                            | key                     | key_len | ref                                              | rows  | Extra                    |
+----+--------------------+-------+--------+------------------------------------------+-------------------------+---------+--------------------------------------------------+-------+--------------------------+
|  1 | PRIMARY            | t1    | index  | PRIMARY,deleted,idx_id_deleted           | idx_id_deleted          | 5       | NULL                                             | 61270 | Using where; Using index |
|  1 | PRIMARY            | p11   | ref    | lang,idx_labels_art_lang_del             | idx_labels_art_lang_del | 43      | store_dwh.t1.id,const,const                      |     1 | Using index              |
|  1 | PRIMARY            | p12   | ref    | deleted,idx_art_del_sup                  | idx_art_del_sup         | 5       | const,store_dwh.t1.id                            |     1 | Using where; Using index |
|  1 | PRIMARY            | r20   | eq_ref | PRIMARY,deleted                          | PRIMARY                 | 4       | store_dwh.p12.supplierid                         |     1 |                          |
|  1 | PRIMARY            | p13   | ref    | supplierid,idx_art_sup_val_del           | idx_art_sup_val_del     | 8       | store_dwh.t1.id,store_dwh.r20.id                 |     1 | Using index              |
|  1 | PRIMARY            | p15   | ref    | idx_art_val_del                          | idx_art_val_del         | 5       | const,store_dwh.t1.id                            |     1 | Using index              |
|  3 | DEPENDENT SUBQUERY | p15b  | ref    | validfrom,idx_art_val_del                | idx_art_val_del         | 5       | store_dwh.t1.deleted,store_dwh.p15.artikleid     |     1 | Using where; Using index |
|  2 | DEPENDENT SUBQUERY | p13b  | ref    | supplierid,validfrom,idx_art_sup_val_del | idx_art_sup_val_del     | 8       | store_dwh.p13.artikleid,store_dwh.p13.supplierid |     1 | Using where; Using index |
+----+--------------------+-------+--------+------------------------------------------+-------------------------+---------+--------------------------------------------------+-------+--------------------------+
8 rows in set (0.00 sec)
Der von Thomas vorgeschlagene Weg:

Zitat:
Hast Du schon mal

Code:
$result = mysql_query("SELECT * FROM table1", $link); 
$num_rows = mysql_num_rows($result);
zum Ermitteln der Treffer probiert? Dann entfällt der Vorab-Query mit dem COUNT() komplett und die Blätterfunktion kann problemlos erzeugt werden.
hingegen fällt flach, da hier tatsächlich die durch LIMIT 0,30 eingegrenzte Suche auch nur die Anzahl 30 ausgibt. Ohne Limit wiederum dauerts so lange wie mit COUNT.

Den selben Query als SELECT DISTINCT p15.currid (für die Erzeugung eines Dropdowns mit allen gefundenen unterschiedlichen Währungen) habe ich mit allen möglichen Indizies zu beschleunigen versucht, aber das Problem letztendlich liegt daran, dass trotz neuer Indizies auf p15.currid und/oder mehrere Felder trotzdem einmal durch die ganze Tabelle gelesen werden muss. Dafür sind die Zeiten akzeptabel. Es liegt einfach an der Summe der nacheinander ablaufenden Queries, SELECT, SELECT COUNT und 2-4 Mal SELECT DISTINCT - je nach Anzahl der zu erzeugenden Dropdowns. Ich kann auch ohne Letztere leben.

EXPLAIN für DISTINCT: (neue Indizies wurden vorher wieder entfernt)
Code:
+----+--------------------+-------+--------+------------------------------------------+-------------------------+---------+--------------------------------------------------+-------+-------------------------------------------+
| id | select_type        | table | type   | possible_keys                            | key                     | key_len | ref                                              | rows  | Extra                                     |
+----+--------------------+-------+--------+------------------------------------------+-------------------------+---------+--------------------------------------------------+-------+-------------------------------------------+
|  1 | PRIMARY            | p12   | index  | deleted,idx_art_del_sup                  | idx_art_del_sup         | 9       | NULL                                             | 61271 | Using where; Using index; Using temporary |
|  1 | PRIMARY            | t1    | eq_ref | PRIMARY,deleted,idx_id_deleted           | PRIMARY                 | 4       | store_dwh.p12.artikleid                          |     1 | Using where                               |
|  1 | PRIMARY            | p11   | ref    | lang,idx_labels_art_lang_del             | idx_labels_art_lang_del | 43      | store_dwh.t1.id,const,const                      |     1 | Using index                               |
|  1 | PRIMARY            | r20   | eq_ref | PRIMARY,deleted                          | PRIMARY                 | 4       | store_dwh.p12.supplierid                         |     1 |                                           |
|  1 | PRIMARY            | p13   | ref    | supplierid,idx_art_sup_val_del           | idx_art_sup_val_del     | 8       | store_dwh.t1.id,store_dwh.r20.id                 |     1 | Using index                               |
|  1 | PRIMARY            | p15   | ref    | idx_art_val_del                          | idx_art_val_del         | 5       | const,store_dwh.t1.id                            |     1 |                                           |
|  3 | DEPENDENT SUBQUERY | p15b  | ref    | validfrom,idx_art_val_del                | idx_art_val_del         | 5       | store_dwh.t1.deleted,store_dwh.p15.artikleid     |     1 | Using where; Using index                  |
|  2 | DEPENDENT SUBQUERY | p13b  | ref    | supplierid,validfrom,idx_art_sup_val_del | idx_art_sup_val_del     | 8       | store_dwh.p13.artikleid,store_dwh.p13.supplierid |     1 | Using where; Using index                  |
+----+--------------------+-------+--------+------------------------------------------+-------------------------+---------+--------------------------------------------------+-------+-------------------------------------------+
8 rows in set (0.00 sec)
Grüsse und bis demnäx
David
Mit Zitat antworten
 

Stichworte
count, join, langsam, mysql, subquery


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:16:43 Uhr.


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


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