
164 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
4.5.7
¨
Uber zwei Schl¨ussel suchen
MySQL optimiert derzeit noch nicht, wenn Sie ¨uber zwei unterschiedliche Schl¨ussel suchen,
die mit OR kombiniert werden (eine Suche mit einem Schl¨ussel mit verschiedenen OR-Teilen
wird recht gut optimiert):
SELECT feld1_index, feld2_index FROM test_tabelle WHERE feld1_index = ’1’
OR feld2_index = ’1’
Der Grund liegt darin, dass wir bislang noch keine Zeit hatten, hierf¨ur eine effiziente
M¨oglichkeit zu implementieren, die das f¨ur allgemeine F¨alle abhandelt. (Die
AND-Handhabung ist im Vergleich jetzt komplett allgemein und funktioniert sehr gut.)
In der Zwischenzeit k¨onnen Sie dieses Problem sehr effizient l¨osen, indem Sie eine
TEMPORARY-Tabelle verwenden. Diese Art der Optimierung ist ebenfalls sehr gut, wenn Sie
sehr komplizierte Anfragen verwenden, bei denen der SQL-Server die Optimierungen in
falscher Reihenfolge durchf¨uhrt.
CREATE TEMPORARY TABLE tmp
SELECT feld1_index, feld2_index FROM test_tabelle WHERE feld1_index = ’1’;
INSERT INTO tmp
SELECT feld1_index, feld2_index FROM test_tabelle WHERE feld2_index = ’1’;
SELECT * from tmp;
DROP TABLE tmp;
Diese M¨oglichkeit der Anfrage ist im Endeffekt ein UNION von zwei Anfragen.
4.5.8 Besuche pro Tag berechnen
Folgendes zeigt, wie Sie die Bit-Gruppen-Funktionen benutzen k¨onnen, um die Anzahl der
Tage pro Monat zu z¨ahlen, in denen ein Benutzer eine Web-Seite besucht hat.
CREATE TABLE t1 (jahr YEAR(4), monat INT(2) UNSIGNED ZEROFILL, tag INT(2) UNSIGNED ZEROFILL);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),(2000,2,23),(2000,2,23);
SELECT jahr,monat,BIT_COUNT(BIT_OR(1<<tag)) AS tage FROM t1 GROUP BY jahr,monat;
Das gibt folgendes Ergebnis zur¨uck:
+------+-------+------+
| jahr | monat | tage |
+------+-------+------+
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
+------+-------+------+
Dies berechnet, wie viele verschiedene Tage f¨ur eine gegebene Jahr-Monats-Kombination
benutzt wurden, bei automatischer Entfernung doppelter Eintr¨age (Duplikate).
Kommentare zu diesen Handbüchern