kompletten Index benutzen statt linkes präfix

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

  • kompletten Index benutzen statt linkes präfix

    Hi,

    ich hab eine MySQL Archiv Tabelle mit 2 Spalten (ID - Integer, data - MEDIUMBLOB). Auf die ID Spalte hab ich einen Index gelegt der benutzt werden soll um ein Attachement welches als BLOB gespeichert ist zu finden.

    Die ID Spalte besteht aus einem 8-stelligen Integer Wert.

    Das Problem liegt da, dass bei dem Index nur das linke präfix verwendet wird. Dadurch kommen bei einer SELECT Anweisung mehrere Zeilen in betracht, was zu lasten der Performance geht.

    Meine Frage:
    Ist es irgendwie machbar, MySQL beizubringen den kompletten Wert als Index zu benutzen und nicht nur das ganz linke präfix?

    Bin für jede hilfe dankbar.

    Gruss
    malu

  • #2
    Ehrlichgesagt versteh ich nicht was du meinst. Wenn du mit "ID" vergleichst, vergleicht er doch mit dem ganzen Inhalt des Attributs?
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      dass bei dem Index nur das linke präfix verwendet wird.
      Was soll das heissen?
      Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

      Kommentar


      • #4
        ich hab zum Beispiel folgende ID: 12345678

        Wenn ich jetzt nach dieser ID suche, dann geht er in dem Index-Baum nur bis zu dem Teil 1234. Dadurch kommen dann mehrere Datensätze in die engere Auswahl und erst dann werden die restlichen Einträge in dem Zweig innerhalb des Indexbaumes verglichen...also 5678.

        Der Indexbaum würde also so umgefähr aufgebaut sein:

        0 - 1000; 1001 - 2000; 2001 - 3000 ...

        anstatt:

        0 - 10000000; 10000001 - 20000000 ....

        Dies verschlechtert meine Performance bei einer abfrage.

        Gruss
        malu

        Kommentar


        • #5
          Wenn ich jetzt nach dieser ID suche, dann geht er in dem Index-Baum nur bis zu dem Teil 1234. Dadurch kommen dann mehrere Datensätze in die engere Auswahl und erst dann werden die restlichen Einträge in dem Zweig innerhalb des Indexbaumes verglichen...also 5678.
          Woher weisst Du das denn? Abfrage? EXPLAIN ?

          Hast Du vielleicht den Index falsch gesetzt und nur auf die ersten 4 Stellen?

          Wenn ich bei einer Tabelle mit einer Autoincrement ID (12 Stellen) nach einer bestimmten ID suche ergibt ein
          EXPLAIN SELECT *
          FROM `portal_logs`
          WHERE `portal_log_ID` =975535

          genau 1 Zeile
          Code:
          id	select_type	table	type key	rows 
          1	SIMPLE		logs	PRIMARY		1
          Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

          Kommentar

          Lädt...
          X