Problem mit der Funktion EXPLAIN

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

  • Problem mit der Funktion EXPLAIN

    Hallo,

    ich bin dabei, meine SQL-Abfragen zu optimieren. Leider bekomme ich bei einigen Statements die Fehlermeldung:

    Impossible WHERE noticed after reading const table

    Woran könnte das liegen?

  • #2
    Das die Einschränkungen in der WHERE-Klausel nicht berücksichtigt werden können?

    Wie sieht deine Abfrage aus?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Konstantentabellen sind übrigens:

      *

      Leere Tabellen oder solche mit nur einem Datensatz.
      *

      Tabellen, die mit einer WHERE-Klausel für einen Primärschlüssel oder einen eindeutigen Index verwendet werden, wobei alle Indexteile mit Konstantenausdrücken verglichen werden und als NOT NULL definiert sind.
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Die Abfrage sieht so aus:

        SELECT * FROM bestaetigung WHERE id = 1

        und die dazugehörige Tabelle lautet

        CREATE TABLE `bestaetigung` (
        `id` int(11) NOT NULL auto_increment,
        `code` varchar(10) NOT NULL default '',
        `zeit` datetime NOT NULL default '0000-00-00 00:00:00',
        PRIMARY KEY (`id`)
        ) TYPE=MyISAM;

        In der Tabelle befinden sich ausreichend Datensätze.

        Kommentar


        • #5
          Wenn ich mehrere Datensätze habe, bekomme ich von EXPLAIN das hier geliefert:

          select_type: SIMPLE
          table: bestaetigung
          type: const
          type: PRIMARY
          ...

          Wenn ich keinen Datensatz mit der ID 1 habe, bekomme ich "impossible WHERE ..."
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Es existiert tatsächlich kein Datensatz mit der ID 1.

            Beim Testen wollte ich einfach nur mal irgendeine ID ausprobieren und wusste nicht, dass es nciht klappt, wenn überhaupt kein Datensatz gelesen werden kann.
            Ich nahm an, EXPLAIN würde anhand der Strukturen imitieren, wie es lesen würde, gäbe es entsprechende Datensätze.

            Ist damit das Ergebnis von EXPLAIN, also welcher Typ 'const, ref, eq_ref, ...' geliefert wird, auch abhängig vom INHALT einer Tabelle?

            Kommentar


            • #7
              Sieht fast so aus, meinst du nicht?

              Wäre ja auch schön blöd, wenn mySQL die Abfragen immer gleich ausführen würde, egal wie die Tabellen denn wirklich aussehen...
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Naja, aber mySQL kennt den Inhalt der Tabellen ja noch nicht, wenn die Abfrage gestartet wird.

                Heißt das, es lohnt sich, bei stark wachsenden Tabellen regelmäßig die wichtigstens Statements per EXPLAIN zu überprüfen?

                Kommentar


                • #9
                  Original geschrieben von Scooby Doo
                  Heißt das, es lohnt sich, bei stark wachsenden Tabellen regelmäßig die wichtigstens Statements per EXPLAIN zu überprüfen?
                  Nein, der Typ bleibt gleich, egal ob ein Datensatz oder 1 Million

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar

                  Lädt...
                  X