Mailinglisten-Archive |
Norbert Pfeiffer schrieb: > Hallo Sebastian, > > in die grosse Tabelle kommen alle "guten" Signale, in die kleine > Tabelle alle fehlerhaften Records. Das Handle ist die ID eines > Logfiles und die haben von 1(Nachts) bis 1M-Signale/Eintraege. > > Bei sehr kleinen Logfile-Haeppchen kann es passieren, dass ein > bestimmtes Handle nur in der Fehlertabelle auftaucht. Also muss > ich beide Tabellen bei der Ermittlung des naechsten Wertes > beruecksichtigen. Derzeit mache ich das so: > <?php > $w1 = $DB->get_single('SELECT MAX(nHandle) FROM xtra.signal'); > $w2 = $DB->get_single('SELECT MAX(nHandle) FROM sigs.error'); > $handle = ($w1 > $w2) ? $w1 : $w2; > ?> > SELECT MAX(nHandle) ist immer schnell, egal ob grosse oder kleine > Tabelle. Aber ein einzelnes Query koennte IMHO noch schneller sein. > Nur mir faellt nix gescheites dafuer ein ... :-( nHandle kann also in beiden vorkommen, kann aber auch nur in einer vorkommen? MySQL Version? SELECT GREATEST((SELECT MAX(nHandle) FROM xtra.signal), (SELECT MAX(nHandle) FROM sigs.error)); > Das mit den JOIN's ist ein Schuss in den Ofen. Der eine ist zu > langsam und der andere bringt falsche Ergebnisse. Letzteres habe > ich gar nicht verstanden. Weil du ein LEFT JOIN machst, das heißt es werden nur die Datensätze verknüpft die ein Gegenstück in der Linken (LEFT) Tabelle haben, wenn du also Links (die erste) die klein Tabelle hast ist es klar das das JOIN wesentlich kleiner ist als wenn du Links dir große Tabelle hast. Was du wolltest wäre also ein FULL JOIN, habe ich persönlich noch ine gebraucht, wird dir wohl bei deinem Geschwindigkeits-Problem nicht helfen. Das Das so lange dauert könnte vielleicht daran liegen das MySQL ein Problem damit hat das die Tabellen in unterschiedlichen DB's liegen -- Sebastian -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive