Tom: Very wide indexes

Hello,

hat von Euch bei MySQL schon mal jemand mit sehr breiten Indexes gearbeitet?
Wenn ich das richtig ghelesen habe, darf die Breite eines Index unter InnoDB 767 Bytes pro Spalte nicht überschreiten und bei MyISAM 1000 Bytes oder 16 Spalten.

Ich möchte nun einen Index über zwei Spalten aufbauen, von denen eine Bigint ist und die andere VarChar (Binary).

Ob das überhaupt geht, weiß ich noch nicht.
Wie MySQL das dann sortiert, weiß ich auch noch nicht.
Wie langsam das Ganze wird, wenn man Inserts oder Deletes durchführt, weiß ich auch noch nicht

Ich wüsste das aber gerne. Bevor ich nun selber anfange zu basteln, würde ich gerne von Euren Erfahrungen zehren ;-))

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bikers-lodge.com
  1. Moin

    Ich möchte nun einen Index über zwei Spalten aufbauen, von denen eine Bigint ist und die andere VarChar (Binary)

    Warum varchar??? Wenns binary ist, dann nutze den entsprechenden Datentyp, den MySql zur verfügung stellt. Ein Index über ein varcharfeld mit langen Datensätzen ist in der Regel "arschlangsam" (TM)

    Zahlenwerte eignen sich grundsätzlich besser als Index. Bei langen varchar Werten ist evtl eine Hilfstabelle hilfreich.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    ### Henry L. Mencken ###
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ### Viktor Frankl ###
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hello,

      Ich möchte nun einen Index über zwei Spalten aufbauen, von denen eine Bigint ist und die andere VarChar (Binary)

      Warum varchar??? Wenns binary ist, dann nutze den entsprechenden Datentyp,

      "binary" bezieht sich auf die Kollation, also die Anreihung der Daten (Sortierung), nicht auf die Darstellung der Daten.

      den MySql zur verfügung stellt. Ein Index über ein varcharfeld mit langen Datensätzen ist in der Regel "arschlangsam" (TM)

      Stellt mir MySQL denn auch einen Extra-Long-Datentyp zur Verfügung? Den kenne ich noch nicht.
      Ich benötige ca. 240 Stellen mit vollen 8 Bit Nutzbreite = 1920 Bit.

      Ich hätte gerne den Typ DECIMAL weiterbenutzt. Aber:

        
      "M ist die Höchstzahl der Stellen (die Genauigkeit) und liegt zwischen 1 und 65. (Ältere Versionen von MySQL hatten hier einen zulässigen Wertebereich von 1 bis 254.)"  
      
      ~~~>  
        
        
      
      > Zahlenwerte eignen sich grundsätzlich besser als Index. Bei langen varchar Werten ist evtl eine Hilfstabelle hilfreich.  
        
      Woher nimmst Du diese Erkenntnis?  
        
      MySQL verwaltet seine Indexe in B+Tree-Architektur. Da sollte es vollkommen egal sein, ob nur ein eingschränkter Wertebereich (Zahlen) oder ein voller Wertebereich (Digits à 8 Bit) zur Verfügung stehen. Das hat nchher nur Einfluss auf die Index-Breite (Anzahl horizontaler Blattseiten) und -Tiefe (Anzahl der vertikalen Blattseiten)  
        
      Und danach fragte ich: Hat schon mal jemand die erlaubte Indexbreite (Zeichenzahl) benutzt?  
        
      Aufgepasst: "Indexbreite" wird hier dopplet benutzt!  
        
        
        
        
      Liebe Grüße aus dem schönen Oberharz  
        
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
       ☻\_  
      /▌  
      / \ Nur selber lernen macht schlau  
      <http://bikers-lodge.com>