Einzelnen Beitrag anzeigen

dispy

Registriert seit: 14. Sep 2006
24 Beiträge
 
#1

MySQl-Query läuft "ewig"

  Alt 3. Jul 2008, 21:06
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:
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:
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:
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...
  Mit Zitat antworten Zitat