2016-06-28 8 views
-1

Wenn ich diese Abfrage auf der Tabelle ausgeführt, die 14 K Aufzeichnungen hatGruppierung mit Aggregatabfrage wird das Zeitlimit MySQL

select max(id) as 'id' from table_records where search_counter='0' group by Record_Date 

führt sie in 0,016 sec die 676 Datensätze zurück

Die ID Spalte ist Primärschlüssel und es hat auch eindeutigen Index darauf definiert

Jetzt

wenn ich die obige Abfrage als subquery zum Beispiel

select * from table_records where id in 
(select max(id) as 'id' from table_records where search_counter='0' group by Record_Date) 

Dies führt für immer. Auf meiner lokalen Dev-Maschine dauert es 139,511 sec auf dem Server auszuführen, es

Zeitüberschreitung erhält Ich bin nicht sicher, was hier genau los ist.

Jede Hilfe wäre

+1

Können Sie pls das Ergebnis erklären für die zweite Abfrage teilen? Übrigens müssen Sie nicht den Primärschlüssel und den eindeutigen Index für dasselbe Feld definieren. Haben Sie versucht, die Abfrage neu zu schreiben, um einen Join statt einer In-Klausel zu verwenden? – Shadow

+0

@Shadow Kannst du mir mit der Join-Abfrage aushelfen? Ich bin nicht in der Lage, es zu lösen. – Sandhurst

+1

Probieren Sie dies aus: 'select t1.id, t1.record_date aus table_records t1 inner join (wählen Sie max (id) als 'id' aus table_records where search_counter = '0' Gruppe von Record_Date) t2 on t1.id = t2.id; ' –

Antwort

1

in Statt geschätzt werden laufen Abfrage einen Join

select t1.id, t1.record_date from table_records t1 
inner join (select max(id) as 'id' from table_records 
      where search_counter='0' group by Record_Date) t2 
on t1.id = t2.id; 
Verwandte Themen