Announcement

Collapse
No announcement yet.

Abfrage-Optimierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage-Optimierung

    Hallo,

    ich habe eine Tabelle (logs, insgesamt 10.688.627 Einträge) mit folgenden Spalten:

    id (bigint(20), UNSIGNED, auto_increment),
    host int(11),
    facility int(11),
    priority int(11),
    level int(11),
    tag int(11),
    timestamp int(10),
    program varchar(50),
    msg text
    --------------------------------------------------------------------------------------------------------
    Die Indizes lauten:
    PRIMARY (PRIMARY, 10677097, id),
    host (INDEX, 15187, host),
    priority (INDEX, 7, priority),
    timestamp (INDEX, 1779516, timestamp)
    --------------------------------------------------------------------------------------------------------
    Die Abfrage:

    Code:
    SELECT * FROM `logs` WHERE `msg` LIKE '%abrupt%'
    liefert 14 Datensätze insgesamt und dauert 33.4280 Sekunden.
    --------------------------------------------------------------------------------------------------------
    Die Parameter für den SQL-Server (unter Linux, 2GB RAM):

    key_buffer = 512M
    max_allowed_packet = 1M
    table_cache = 512
    sort_buffer_size = 1M
    net_buffer_length = 8K
    read_buffer_size = 512K
    read_rnd_buffer_size = 512K
    myisam_sort_buffer_size = 8M
    query_cache_size = 512M
    optimizer_search_depth = 0
    tmp_table_size = 64M
    --------------------------------------------------------------------------------------------------------
    Was kann ich tun, um meine Abfrage zu optimieren?

    Mit freundlichen Grüßen und in der Hoffnung auf Hilfe,

    Nils

  • #2
    ... LIKE '%abrupt%'
    Ganz böse. Mit einem "%" am Anfang schaltet du jeden Suchindex aus.

    Lösungsmöglichkeit:

    1, Lass MySQL mehr Speicher allokieren so das es evtl. die Ganze Tabelle Cachen kann
    2, Such mal nach Volltextindex
    3, Probier mal ob der Tabellentyp Memory was bringt

    Comment


    • #3
      Originally posted by Bernhard Geyer View Post
      Ganz böse. Mit einem "%" am Anfang schaltet du jeden Suchindex aus.

      Lösungsmöglichkeit:

      1, Lass MySQL mehr Speicher allokieren so das es evtl. die Ganze Tabelle Cachen kann
      2, Such mal nach Volltextindex
      3, Probier mal ob der Tabellentyp Memory was bringt
      Hallo Bernhard,

      vielen Dank für deine schnelle Antwort.

      zu 1.: Wie meinst du das genau? MySQL als Dienst unter Linux mehr Speicher allokieren lassen oder bestimmte Server-Parameter ändern (wenn ja, welche und wie? Habe schon vieles versucht...)?

      zu 2.: Mache ich.

      zu 3.: Eventuell später, zu zeitaufwändig.

      Ich melde mich noch mal, wenn es vorangeht.

      Comment


      • #4
        Originally posted by MephKi View Post
        ...oder bestimmte Server-Parameter ändern (wenn ja, welche und wie? Habe schon vieles versucht...)?
        Ja. Aber die genauen Parameter bin ich auch überfragt. Muß praktisch nie MySQL-Server optimieren. Aber auf der MySQL-Homepage sind alle Parameter doch beschrieben und irgendwelche sorgen dafür das MySQL (je nach installation) sehr sparsam mit Speicher ist.

        Comment


        • #5
          Originally posted by Bernhard Geyer View Post
          Ja. Aber die genauen Parameter bin ich auch überfragt. Muß praktisch nie MySQL-Server optimieren. Aber auf der MySQL-Homepage sind alle Parameter doch beschrieben und irgendwelche sorgen dafür das MySQL (je nach installation) sehr sparsam mit Speicher ist.
          In einem anderen Forum hat jemand behauptet, meine Abfrage kann überhaupt keinen Index verwenden, ich müsste schon den ersten Platzhalter weglassen. Wenn das stimmt, wäre das äußerst unvorteilhaft, denn es würde das Resultat beeinflussen.
          Ich habe jetzt einen Volltextindex auf das betreffende Feld gesetzt (was übrigens ca. 1.5 Stunden dauerte; allerdings ist die Kardinalität dieses Index 0, was mich wundert, denn ich bin davon ausgegangen, dass die Kardinalität der Anzahl der Datensätze der Tabelle entsprechen würde), es hat allerdings nur zur Folge gehabt, dass die Anfragezeit sich sogar noch verlängerte! Ich versuche es jetzt noch einmal mit einem "normalen" Index...mal sehen, ob das was bringt.

          Comment

          Working...
          X