AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL-Index

Ein Thema von Namenloser · begonnen am 24. Mär 2013 · letzter Beitrag vom 24. Mär 2013
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

MySQL-Index

  Alt 24. Mär 2013, 13:56
Datenbank: MySQL • Version: 5 • Zugriff über: PHP
Hallo,

in einem WBB3-Forum, das ich mitbetreue, haben wir so 1–2 mal am Tag das Problem, dass für ca. 5–10 Minuten der MySQL-Server komplett blockiert ist. Dazwischen ist die Performance in Ordnung.

Ich habe jetzt mal das Slow-Query-Log eingeschaltet und einige der dort auftauchenden Queries mit EXPLAIN aufschlüsseln lassen, um zu gucken, ob Indizes benutzt werden usw..

Dabei ist mir jetzt durch Zufall was aufgefallen:
Code:
mysql> explain SELECT         postID, attachments, pollID
    ->                        FROM           wbb1_1_post post
    ->                        WHERE threadID = 15 AND isDisabled = 0
    ->                        ORDER BY       post.time ASC LIMIT 152520, 40;
+----+-------------+-------+------+---------------------+----------+---------+-------+--------+-----------------------------+
| id | select_type | table | type | possible_keys      | key     | key_len | ref  | rows  | Extra                      |
+----+-------------+-------+------+---------------------+----------+---------+-------+--------+-----------------------------+
|  1 | SIMPLE     | post | ref | threadID,isDisabled | threadID | 4       | const | 112119 | Using where; Using filesort |
+----+-------------+-------+------+---------------------+----------+---------+-------+--------+-----------------------------+
Man beachte: Für jede der wichtigen Spalten existiert ein separater Index: threadID, isDisabled und time (auch wenn man letzteres hier nicht sieht – warum auch immer). Dennoch wird der Index zum Sortieren nicht verwendet.

Dann hab ich (eigentlich aus Versehen) einen Index über alle 3 Spalten angelegt. Nun wieder den gleichen Query wie oben:
Code:
mysql> explain SELECT         postID, attachments, pollID
    ->                        FROM           wbb1_1_post post                        
    ->                        WHERE threadID = 15 AND isDisabled = 0                         
    ->                        ORDER BY       post.time ASC LIMIT 152520, 40;
+----+-------------+-------+------+--------------------------------+------------+---------+-------+--------+-------------+
| id | select_type | table | type | possible_keys                 | key       | key_len | ref  | rows  | Extra      |
+----+-------------+-------+------+--------------------------------+------------+---------+-------+--------+-------------+
|  1 | SIMPLE     | post | ref | threadID,isDisabled,threadID_3 | threadID_3 | 4       | const | 112161 | Using where |
+----+-------------+-------+------+--------------------------------+------------+---------+-------+--------+-------------+
Dieses threadID_3 ist also mein Index über (threadID, isDisabled, time). Hoppla – plötzlich kein Filesort mehr nötig?

Heißt das also im Klartext, MySQL kann pro Query immer nur einen einzigen Index verwenden und nicht mehrere kombinieren? Wäre es dann nicht schlauer immer nur einen Index anzulegen, über alle möglichen Spalten? Oder gäbe es da irgendwelche Nachteile?

Ich brauch eine Erklärung

Geändert von Namenloser (24. Mär 2013 um 14:04 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz