Pit: mysql: Spalte nach Zeichen abfragen

Hallo,

kann ich eine Tabelle so abfragen, dass sie mir alle Einträge der Tabelle ausgibt, bei dem in Spalte "xy" (varchar) mehr als 20 Zeichen eingetragen sind?

Pit

  1. Tach!

    kann ich eine Tabelle so abfragen, dass sie mir alle Einträge der Tabelle ausgibt, bei dem in Spalte "xy" (varchar) mehr als 20 Zeichen eingetragen sind?

    Ja, aber das läuft auf einen Full-Table-Scan hinaus. Jedenfalls gibt es die Funktionen LENGTH() und CHAR_LENGTH(). Du möchtest vermutlich die zweitgenannte verwenden.

    dedlfix.

    1. Hallo dedlfix,

      immer table scan? Wenn da im Index steht, sollte ein index scan genügen. Oder klappt das in MySQL nicht?

      Rolf

      --
      sumpsi - posui - clusi
      1. Tach!

        immer table scan? Wenn da im Index steht, sollte ein index scan genügen. Oder klappt das in MySQL nicht?

        Der Index ist ja nicht nach Länge sortiert. Es bleibt sich dann relativ gleich, ob man den gesamten Index durchforstet oder die Tabelle.

        Explain sagt: Possible keys: null.

        dedlfix.

      2. Hello,

        immer table scan? Wenn da im Index steht, sollte ein index scan genügen. Oder klappt das in MySQL nicht?

        Wenn es einen Index über die Zeichenlänge des Feldinhaltes gibt, mag das stímmen.
        Der müsste dann aber als redundantes Datum (Extraspalte) bei jeder Änderung in der eigentlichen Datenspalte aktualisiert werden (Trigger?).

        Die VarChar-Daten werden bei MySQL als b+Tree-Struktur abgelegt. Die ist nach dem Inhalt und nicht nach dessen Länge organisiert.

        Wenn man also Wert auf die Länge der Daten legt, sollte man eine Extraspalte mittels Trigger führen lassen. Das wird dann später trotzdem ähnlich langsam, wie ein boolescher Index werden. Die Bäume werden dann schnell unbalanciert.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
    2. Tach!

      kann ich eine Tabelle so abfragen, dass sie mir alle Einträge der Tabelle ausgibt, bei dem in Spalte "xy" (varchar) mehr als 20 Zeichen eingetragen sind?

      Ja, aber das läuft auf einen Full-Table-Scan hinaus. Jedenfalls gibt es die Funktionen LENGTH() und CHAR_LENGTH(). Du möchtest vermutlich die zweitgenannte verwenden.

      Hi dedlfix.

      hat funktioniert, danke. Und full table scan macht gar nichts, ich muß nur 1 x durchlaufen lassen, um etwas zu kontrollieren, danach nie wider.

      Pit