Frage

Ich habe eine Datenbank auf MySQL 5.0.15 erstellt. Ich habe eine Abfrage und wenn ich diese Abfrage in dieser MySQL -Version ausführe, bekomme ich 0,9 s Laufzeit. Wenn ich diese Datenbank mit derselben Hardware auf einen anderen MySQL -Server importiere und dieselbe Abfrage ausführe, bekomme ich über die 120er und manchmal hängt MySQL.

Was ist der Unterschied zwischen 5,0 und 5,1 oder 5,5? Ich habe 5.1- und 5,5 -Versionen getestet.

Ist es möglich, dass eine Abfrage in einer neueren Version länger dauert (so etwas wie MySQL -Struktur ändert sich)?

Entschuldigung, aber ich kann diese Frage hier nicht einsetzen, aber die Abfrage ist wie:

SELECT fl_passenger_ticket. *, 
       fl_aganc.name                             AS agancname, 
       fl_pnr.remark                             AS remark, 
       fl_pnr.reservetime                        AS reservetime, 
       fl_pnr.cancelpnr, 
       fl_flight_date.fromcity                   AS fromcity, 
       fl_flight_date.tocity                     AS tocity, 
       fl_flight_date.flightdate                 AS flightdate, 
       fl_flightdate_capacity.adultper           AS adultper, 
       fl_flightdate_capacity.childper           AS childper, 
       fl_flightdate_capacity.infantper          AS infantper, 
       fl_flightdate_capacity.cancel             AS cancelsegment, 
       fl_flightdate_capacity.tax1adultpric, 
       fl_flightdate_capacity.tax1childpric, 
       fl_flightdate_capacity.tax1infantpric, 
       fl_flightdate_capacity.tax2adultpric, 
       fl_flightdate_capacity.tax2childpric, 
       fl_flightdate_capacity.tax2infantpric, 
       ( fl_flightdate_capacity.tax3adultpric + 
         fl_flightdate_capacity.tax4adultpric + 
         fl_flightdate_capacity.tax5adultpric )  AS taxxtadultpric, 
       ( fl_flightdate_capacity.tax3childpric + 
         fl_flightdate_capacity.tax4childpric + 
         fl_flightdate_capacity.tax5childpric )  AS taxxtchildpric, 
       ( fl_flightdate_capacity.tax3infantpric + 
         fl_flightdate_capacity.tax4infantpric 
         + 
         fl_flightdate_capacity.tax5infantpric ) AS taxxtinfantpric 
FROM   fl_passenger_ticket 
       INNER JOIN fl_pnr 
         ON ( fl_passenger_ticket.pnrid = fl_pnr.pnrid ) 
       INNER JOIN fl_aganc 
         ON ( fl_pnr.agancid = fl_aganc.agancid ) 
       LEFT JOIN fl_flightdate_capacity 
         ON ( fl_pnr.pnrid = fl_flightdate_capacity.pnrid ) 
       LEFT JOIN fl_flight_date 
         ON ( fl_flightdate_capacity.flightdateid = fl_flight_date.flightdateid 
            ) 
WHERE  fl_passenger_ticket.ticketnumber <> '' 
       AND fl_passenger_ticket.pnrid <> 0 
       AND fl_pnr.agancid = 60 
       AND fl_flightdate_capacity.aganccharterid = 0 
       AND fl_flightdate_capacity.cancel IN ( 0, 1 ) 
       AND fl_pnr.reservetime >= '2011/09/01 00:00:00' 
       AND fl_pnr.reservetime <= '2011/09/19 23:59:00' 
ORDER  BY fl_passenger_ticket.rowid, 
          fl_pnr.reservetime 
  • Ich habe 4 Beiträge.

  • Der Tisch ist InnoDB.

  • Es gibt 100000 Datensätze

Das Ergebnis sind 100 Zeilen und 50 Spalten.

Erklären Sie das Ergebnisenter image description here

Zeigen Sie Variablen wie das Ergebnis von 'InnoDB%'

enter image description here

War es hilfreich?

Lösung

Neuere Versionen von MySQL verbessern die InnoDB -Leistung (insbesondere 5,5). Ich würde wärmstens empfehlen, diese Version zu aktualisieren, wenn Sie InnoDB ausführen möchten.

Eine Methode, mit der Sie jagen können, warum es so viel länger dauert MySQL -Profile

mysql> SET PROFILING=1;
mysql> SHOW TABLES;
mysql> SELECT * FROM foo;
mysql> SET PROFILING=0;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW PROFILES;
+----------+------------+-------------------+
| Query_ID | Duration   | Query             |
+----------+------------+-------------------+
|        1 | 0.09270400 | SHOW TABLES       |
|        2 | 0.00026400 | SELECT * FROM foo |
+----------+------------+-------------------+
2 rows in set (0.05 sec)

mysql> SHOW PROFILE FOR QUERY 2;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000053 |
| checking permissions | 0.000009 |
| Opening tables       | 0.000032 |
| System lock          | 0.000010 |
| init                 | 0.000028 |
| optimizing           | 0.000003 |
| statistics           | 0.000012 |
| preparing            | 0.000008 |
| executing            | 0.000003 |
| Sending data         | 0.000068 |
| end                  | 0.000004 |
| query end            | 0.000007 |
| closing tables       | 0.000008 |
| freeing items        | 0.000013 |
| logging slow query   | 0.000003 |
| cleaning up          | 0.000003 |
+----------------------+----------+
16 rows in set (0.04 sec)

Dies sollte Ihnen einen Hinweis geben, wo es hängt. Aus Ihrer Erklärung Ausgabe sollten Sie versuchen, eine Indizierung in der zweiten und dritten Tabellen zu erhalten, anstatt vollständige Tabellen -Scans durchzuführen. Aber ohne DDL oder die tatsächlichen Join -Spalten kann ich nichts Besseres vorschlagen, als Indexierungsstrategien zu erforschen.

Andere Tipps

Verwenden Sie MySQL 5.5 ohne ordnungsgemäße Konfiguration aus dem Feld Als würde man einen Lamborghini bekommen und eine erstklassige Leistung auf einer Gallone von regulärem Benzin (87 Oktan) erwarten.

Sie sollten erwarten Bessere Leistung mit hohem Oktanzasolin in einem Lamborghini.

Wie bei jedem Datenbankprodukt ist es nur so leistungsverstärkt, wie Sie es tatsächlich konfigurieren. Genau wie Spiderman sagte (8:36 - 8:40): "Mit großer Macht muss es auch immer eine große Verantwortung geben.".

Um aus MySQL 5.5 eine bessere Leistung zu erzielen, müssen Sie ehrlich bestimmte Dinge konfigurieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top