| |
|
|
 |
Autor |
Nachricht |
 |
| |
| dispy |
#1| Verfasst am: 03.07.2008, 22:06 Titel: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 24 angemeldet: 14.09.2006

|
Sprache: PHP Datenbank: MySQl, Version: 5, Zugriff über: ganz normoal :) Moin,
hab meinen Account mal reaktiviert
Ich hab jetzt schon in 2 Foren gefragt, hoffe, dass ihr evt. eine Lösung findet
Problem:
Der (folgende) Query läuft "ewig" durch -nach 10 min bekomme ich dann die Meldung "MySQl-Server has gone away". Ich =>ratlos, da der Query wirklich gut aussieht.
SQL-Code: | zusammenfalten | markieren | 1 · · · 5 · · · · 10
| SELECT
conquer.timestamp AS time,
conquer.new_owner AS new_owner_id
FROM de12_conquer AS conquer
INNER JOIN de12_tribe AS conqueror ON conqueror.id=conquer.new_owner
INNER JOIN de12_tribe AS loser ON loser.id=conquer.old_owner
WHERE (conquer.timestamp>0 && conquer.timestamp<1213647029734) AND (conqueror.ally=37038 OR loser.ally=37038 )
ORDER BY conquer.timestamp DESC LIMIT 50 |
|
Strukturen der Tabellen:
| Zitat: |
CREATE TABLE IF NOT EXISTS `de12_tribe` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL default '',
`ally` int(11) NOT NULL,
`villages` int(5) NOT NULL,
`points` int(11) NOT NULL,
`rank` int(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `de12_conquer` (
`villageid` int(11) NOT NULL,
`timestamp` int(11) NOT NULL,
`new_owner` int(11) NOT NULL,
`old_owner` int(11) NOT NULL,
KEY `villageid` (`villageid`),
KEY `timestamp` (`timestamp`),
KEY `new_owner` (`new_owner`),
KEY `old_owner` (`old_owner`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
Und jetzt wirds richtig interessant: Folgender Query funktioniert nämlich:
| SQL-Code: | markieren | SELECT
conquer.timestamp AS time,
conquer.new_owner AS new_owner_id
FROM de12_conquer AS conquer
INNER JOIN de12_tribe AS conqueror ON conqueror.id=conquer.new_owner
WHERE (conquer.timestamp>0 && conquer.timestamp<1213647029734) AND (conqueror.ally=37038 )
ORDER BY conquer.timestamp DESC LIMIT 50 |
|
Also nur ein INNER JOIN auf die gleiche Tabelle mehr und der ganze Query braucht ewig..... ??
Ich habe statt INNER JOIN auch schon LEFT und RIGHT JOIN probiert- das funzt auch nicht.
Einträge in de12_conquer:625,687
de12_tribe: 7,616
MySQL-Explain
| SQL-Code: | markieren | id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE loser ALL PRIMARY NULL NULL NULL 7616 Using temporary; Using filesort
1 SIMPLE conquer ref timestamp,new_owner,old_owner old_owner 4 dispy.loser.id 8 Using where
1 SIMPLE conqueror ALL PRIMARY NULL NULL NULL 7616 Range checked for each record (index map: 0x1) |
|
Bin echt ratlos und zwei andere Foren waren das auch -ich hoffe ich kann das Proble mit eurer Hilfe endlich lösen
Vielen DAnk im Voraus !
MfG
dispy |
 Computer sind eben nur so schlau wie ihre Programmierer... |
 |
|
|
|
| |
| alzaimar |
#2| Verfasst am: 03.07.2008, 22:10 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Moderator Alter: 45 Status: offline Beiträge: 4.083 angemeldet: 06.05.2005 Wohnort: Berlin RAD-Studio 2007 Enterprise

|
1. Indexiere mal alle Felder, die an einem JOIN beteiligt sind.
2. Kann MySQL temporäre Tabellen? Dann mach das in zwei Schritten |
 1. Das Selbstverständnis unter der Voraussetzung.
2. Und das ist es, was wir unseren Wählern schuldig sind
3. Die konzentrierte Beinhaltung als Kernstück eines zukunftsweisenden Parteiprogramms.
|
 |
|
|
|
| |
| dispy |
#3| Verfasst am: 03.07.2008, 22:12 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 24 angemeldet: 14.09.2006

|
| alzaimar hat folgendes geschrieben: | 1. Indexiere mal alle Felder, die an einem JOIN beteiligt sind.
2. Kann MySQL temporäre Tabellen? Dann mach das in zwei Schritten |
Ja, kann es: Aber für jeden Query ne temp anzulegen wäre bisschen extrem aufwändig oder? Das mit vollen Indexieren mach ich mal ^^
MfG
dispy |
 Computer sind eben nur so schlau wie ihre Programmierer... |
 |
|
|
|
| |
| sx2008 |
#4| Verfasst am: 03.07.2008, 23:41 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
sehr aktives Mitglied Status: offline Beiträge: 553 angemeldet: 16.02.2008 Delphi 2007 Professional

|
Folgende Felder sollten indiziert werden:
de12_conquer.new_owner
de12_conquer.old_owner
de12_conquer.timestamp // sollte entscheidenden Betrag zum Sortieren liefern
de12_tribe.id // index nur nötig, wenn id nicht eh schon Primärschlüssel ist
de12_tribe.ally |
|
 |
|
|
|
| |
| alzaimar |
#5| Verfasst am: 04.07.2008, 06:54 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Moderator Alter: 45 Status: offline Beiträge: 4.083 angemeldet: 06.05.2005 Wohnort: Berlin RAD-Studio 2007 Enterprise

|
| dispy hat folgendes geschrieben: | | alzaimar hat folgendes geschrieben: | | ...2. Kann MySQL temporäre Tabellen? Dann mach das in zwei Schritten | Ja, kann es: Aber für jeden Query ne temp anzulegen wäre bisschen extrem aufwändig oder? | Da hast Du natürlich Recht. Daher ist das Punkt 2. Wenn Punkt 1 nicht funktioniert, bleibt Dir aber -außer mehr RAM- nichts Anderes übrig... |
 1. Das Selbstverständnis unter der Voraussetzung.
2. Und das ist es, was wir unseren Wählern schuldig sind
3. Die konzentrierte Beinhaltung als Kernstück eines zukunftsweisenden Parteiprogramms.
|
 |
|
|
|
| |
| franktron |
#6| Verfasst am: 04.07.2008, 08:47 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
aktives Mitglied Alter: 34 Status: offline Beiträge: 854 angemeldet: 11.11.2003 Wohnort: Oldenburg Delphi 2006 Professional

|
Der Fehler ist ganz einfach de12_conquer hat keine Primarindex das mag MySQL garnicht |
|
 |
|
|
|
| |
| alzaimar |
#7| Verfasst am: 04.07.2008, 08:51 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Moderator Alter: 45 Status: offline Beiträge: 4.083 angemeldet: 06.05.2005 Wohnort: Berlin RAD-Studio 2007 Enterprise

|
Wieso funktioniert dann die zweite Query? |
 1. Das Selbstverständnis unter der Voraussetzung.
2. Und das ist es, was wir unseren Wählern schuldig sind
3. Die konzentrierte Beinhaltung als Kernstück eines zukunftsweisenden Parteiprogramms.
|
 |
|
|
|
| |
| franktron |
#8| Verfasst am: 04.07.2008, 09:02 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
aktives Mitglied Alter: 34 Status: offline Beiträge: 854 angemeldet: 11.11.2003 Wohnort: Oldenburg Delphi 2006 Professional

|
| alzaimar hat folgendes geschrieben: | | Wieso funktioniert dann die zweite Query? |
Gute Frage. Aber in der MySQL Doku steht das man immer ein PI habe sollte |
 OHHHH was dis Button do |
 |
|
|
|
| |
| alzaimar |
#9| Verfasst am: 04.07.2008, 09:07 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Moderator Alter: 45 Status: offline Beiträge: 4.083 angemeldet: 06.05.2005 Wohnort: Berlin RAD-Studio 2007 Enterprise

|
[OT] PK / PI sind grundsätzlich zu vergeben, einfach damit jeder Datensatz eindeutig identifiziert werden kann. Ohne PK hast Du keine Möglichkeit, bei zwei identischen Datensätzen nur einen zu löschen, ohne die Tabelle komplett neu zu bauen. [/OT] |
 1. Das Selbstverständnis unter der Voraussetzung.
2. Und das ist es, was wir unseren Wählern schuldig sind
3. Die konzentrierte Beinhaltung als Kernstück eines zukunftsweisenden Parteiprogramms.
|
 |
|
|
|
| |
| dispy |
#10| Verfasst am: 04.07.2008, 15:27 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 24 angemeldet: 14.09.2006

|
| alzaimar hat folgendes geschrieben: | | [OT] PK / PI sind grundsätzlich zu vergeben, einfach damit jeder Datensatz eindeutig identifiziert werden kann. Ohne PK hast Du keine Möglichkeit, bei zwei identischen Datensätzen nur einen zu löschen, ohne die Tabelle komplett neu zu bauen. [/OT] |
Das ist leider nicht möglich.... sonst hätte ich das schon gemacht ^^
Ich habe alle Felder die beteiligt sind nun indexiert- trotzdem lädt der Query ewig -.-
Habt ihr noch weitere Ideen ?
MfG
dispy |
 Computer sind eben nur so schlau wie ihre Programmierer...
Zuletzt bearbeitet von dispy am 04.07.2008, 15:32, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| franktron |
#11| Verfasst am: 04.07.2008, 15:37 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
aktives Mitglied Alter: 34 Status: offline Beiträge: 854 angemeldet: 11.11.2003 Wohnort: Oldenburg Delphi 2006 Professional

|
Mach doch einen Autoinc PI so mach ich das immer |
 OHHHH was dis Button do |
 |
|
|
|
| |
| dispy |
#12| Verfasst am: 04.07.2008, 15:42 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 24 angemeldet: 14.09.2006

|
Was ist ein Autoinc PI ? o.O |
 Computer sind eben nur so schlau wie ihre Programmierer... |
 |
|
|
|
| |
| DeddyH |
#13| Verfasst am: 04.07.2008, 15:43 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 43 Status: offline Beiträge: 11.362 angemeldet: 17.09.2006 Wohnort: Schweina/Thüringen Delphi 2007 Professional

|
Das ist ein künstlicher Schlüssel, der automatisch inkrementiert wird. |
 10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.
If a train station is where the train stops, what the hell is a workstation? |
 |
|
|
|
| |
| dispy |
#14| Verfasst am: 04.07.2008, 15:48 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 24 angemeldet: 14.09.2006

|
das bringt doch gar nix... der wird doch nicht abgefragt..
MfG
dispy |
 Computer sind eben nur so schlau wie ihre Programmierer... |
 |
|
|
|
| |
| franktron |
#15| Verfasst am: 04.07.2008, 16:21 Titel: Re: MySQl-Query läuft "ewig" |
 |
 |
 |
|
aktives Mitglied Alter: 34 Status: offline Beiträge: 854 angemeldet: 11.11.2003 Wohnort: Oldenburg Delphi 2006 Professional

|
Das ist egal mach es doch einfach mal und teste es. |
 OHHHH was dis Button do |
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|