![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 | ||
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Tag,
nun, ich hab etwas ne Zeit lang lokal auf meinem Rechner (Windows) programmiert und jetzt mal versucht, online zu stellen. Nun erhalte ich beim Aufruf folgende Fehlermeldung: Zitat:
Der sieht nälmich bisher so aus: Code:
SELECT
text, identifier
FROM
xpc1_language_de
WHERE
identifier = 'username' OR identifier = 'password' OR identifier = 'loginas' OR identifier = 'online' OR identifier = 'busy' OR identifier = 'rightback' OR identifier = 'away' OR identifier = 'longeraway' OR identifier = 'invisible' OR identifier = 'loginbutton'
Lokal funktioniert das ohne Probleme (MySQL 5.0.20-community) innerhalb Bruchteilen von Sekunden, online auch (zumindest in phpMyAdmin), bekomme jedoch die gegebene Fehlermeldung (MySQL 3.23.49-log, omg, ich hab noch mysql3) .. Nun bräucht ich mal eure Hilfe beim optimieren vom Query, wie könnt ich den vereinfachen bzw verbessern? //edit: Index liegt natürlich auf identifier. Mal ein Quote aus phpmyadmin: Zitat:
//edit2: Seltsam, lass ich im Sql-Query das letzte "OR identifier = 'loginbutton'" weg, funktioniert der Query, bzw das EXPLAIN genauso, wie es funktionieren soll - füge ich es wieder hinzu, tritt der Fehler wieder auf. Dabei ist es egal, was das für ein identifier ist, ob 'loginbutton' oder 'registerhead' usw.. An was könnte das liegen?
__________________
http://www.ChrisDiary.De Geändert von Chr!s (29.07.2006 um 20:53 Uhr). |
||
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
|
Ich vermute Punkt 3:
http://dev.mysql.com/doc/refman/4.1/...able-scan.html Das sollte weggehen, wenn die Tabelle grösser wird, füll die mal Testweise mit Dummy-Einträgen, dann sollte der Full-Table-Scan weggehen. Wenn ich Recht habe, ist die Fehlermeldung dein einziges Problem und Du solltest diese ignorieren/unterdrücken. |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
Also als erstes solltest du mindestens die Spalte "text" in "`" setzen: "`text`", da es sich bei dem Wort "text" um ein reserviertes Wort handelt.
Dann würde ich dir aber auch noch empfehlen die Funktion "FIND_IN_SET" zu nutzen: http://dev.mysql.com/doc/refman/5.1/...functions.html Ich könnte mir vorstellen, dass die etwas performanter ist, musst du mal ausprobieren
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #4 | |||
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Zitat:
Zitat:
Zitat:
__________________
http://www.ChrisDiary.De |
|||
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
Eventuell hilft auch einfach ein "MATCH AGAINST" mit Volltext-Schlüssel über das Feld, auf jedenfall sieht der Query dann deutlich schlanker aus
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #6 | |
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
//edit
Okay, ich hab das jetzt mit IN() gelöst: Code:
SELECT phraseContent, identifier FROM xpc1_language_de WHERE phraseContent in ('field1','field2','field3');
Code:
SELECT
u.id AS userID, u.username,
c.id AS roomID, c.roomname
FROM
xpc1_users AS u
LEFT JOIN
xpc1_chatrooms AS c
ON
u.chatroom = c.id
WHERE
u.chatroom != '0' AND
u.isOnline = '1'
Zitat:
Mittels EXPLAIN bekomm ich sowohl für table 'u' als auch für table 'c' den TYPE 'all' was nicht gut ist..
__________________
http://www.ChrisDiary.De Geändert von Chr!s (31.07.2006 um 13:50 Uhr). |
|
|
|
|
|
|
Nach oben #8 | |
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Zitat:
PHP-Code:
__________________
http://www.ChrisDiary.De |
|
|
|
|
|
|
Nach oben #10 | |
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Zitat:
__________________
http://www.ChrisDiary.De |
|
|
|
|
|
|
Nach oben #11 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
Hast du bei den Tabellen auch Indizes gesetzt? Könnte sein, dass das damit zu tun hat. Wenn nciht: Dann mach das mal so schnell wie möglich, da ohne Indizes immer die komplette Tabelle durchsucht werden muss.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #12 | |
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Zitat:
__________________
http://www.ChrisDiary.De |
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Dynamische mySQL Query | la-finest | PHP-Programmierung | 2 | 25.01.2007 16:36 |
| Auslesen zweier verschiedener Datensätze in einem Query (mySQL) | Chr!s | Datenbanken | 8 | 14.11.2006 19:57 |
| Your most abnormal Query | Guradia | Datenbanken | 21 | 19.04.2006 00:15 |
| MySQL Query wird nicht ausgeführt | Garnele | Datenbanken | 6 | 01.04.2006 03:17 |
| MySQL 5.1 kommt in die Beta-Phase | Ben | Nachrichten | 1 | 02.03.2006 14:31 |