Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie bekomme ich diese Abfrage performanter?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    @erc

    Ich weis nicht ob du mich für bescheuert hälst oder sowas aber ich habe doch schon geschrieben:

    es gibt keinen LIMIT und selbst wenn ich die ganze order_status Abfrage rauslasse wird es nicht schneller.

    Gruß

    Claus
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

    Kommentar


    • #17
      Ich habe den Query jetzt mal auf ein minimum reduziert wie er immer noch zu lange braucht:

      Code:
              $sql = "SELECT DISTINCT(ge_order.order_id),`order_startdate`,`order_enddate`,`order_jobnumber`,`tool_status`,
                          GROUP_CONCAT(ge_tool.tool_number SEPARATOR '<br>') AS `order_tools`
                      FROM ge_order
                      LEFT JOIN ge_ordertool
                          ON (ge_order.order_id=ge_ordertool.ordertool_order)
                      LEFT JOIN ge_tool
                          ON (ge_tool.tool_id=ge_ordertool.ordertool_tool)
                      GROUP BY ge_ordertool.ordertool_order
                      ";
      lasse ich hier den GROUP_CONCAT weg, dann geht es wieder schnell.

      Hier auch noch der EXPLAIN dazu:

      +----+-------------+--------------+--------+---------------+---------+---------+------------------------------------+------+------------------------------+
      | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
      +----+-------------+--------------+--------+---------------+---------+---------+------------------------------------+------+------------------------------+
      | 1 | SIMPLE | ge_ordertool | index | NULL | PRIMARY | 8 | NULL | 2823 | Using index; Using temporary |
      | 1 | SIMPLE | ge_order | eq_ref | PRIMARY | PRIMARY | 4 | itool.ge_ordertool.ordertool_order | 1 | |
      | 1 | SIMPLE | ge_tool | eq_ref | PRIMARY | PRIMARY | 4 | itool.ge_ordertool.ordertool_tool | 1 | |
      +----+-------------+--------------+--------+---------------+---------+---------+------------------------------------+------+------------------------------+


      Gruß

      Claus
      Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

      Kommentar


      • #18
        Ich bin noch einen Schritt weiter.

        Das Problem liegt wohl in der Kombination aus DISTINCT und dem GROUP BY. Lasse ich eins von beiden weg, wird es wiederum schnell.

        Gruß

        Claus
        Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

        Kommentar


        • #19
          Zitat von Thallius Beitrag anzeigen
          Ich habe den Query jetzt mal auf ein minimum reduziert wie er immer noch zu lange braucht:

          Code:
                  $sql = "SELECT DISTINCT(ge_order.order_id),`order_startdate`,`order_enddate`,`order_jobnumber`,`tool_status`,
                              GROUP_CONCAT(ge_tool.tool_number SEPARATOR '<br>') AS `order_tools`
                          FROM ge_order
                          LEFT JOIN ge_ordertool
                              ON (ge_order.order_id=ge_ordertool.ordertool_order)
                          LEFT JOIN ge_tool
                              ON (ge_tool.tool_id=ge_ordertool.ordertool_tool)
                          GROUP BY ge_ordertool.ordertool_order
                          ";
          lasse ich hier den GROUP_CONCAT weg, dann geht es wieder schnell.

          Mit ist es übrigens auch syntaktisch falsch. Das weiß MySQL nur noch nicht, das kommt erst in der nächsten Version.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #20
            Ich frage mich wiso ich damals eigentlich den DISTINCT überhaupt rein gemacht habe. Es kann doch eigentlich gar keine zwei gleichen Datensätze geben die die gleiche order_id haben, da dieses ja ein primary key ist. Oder denk ich jetzt gerade verkehrt?

            Gruß

            Claus
            Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

            Kommentar

            Lädt...
            X