Wir haben eine kleine mobile App, die senden Sie die Teams Standorte im Feld arbeiten. Wir haben ein webbasiertes Admin-Panel, um den letzten Standort jedes Teams im Feld zu sehen, es gibt 8-10 Teams.MySQL Abfrage-Optimierung, um 8-10 Datensätze aus einer großen Tabelle zu erhalten
Jetzt die Tabelle, die die Standorte speichern, werden größer (rund 800K Datensätze) und es dauert etwa 10 Sekunden, um die Informationen aus der db zu bekommen.
Wir können die alten Aufzeichnungen nicht einfach entfernen, da wir die Geschichte der Teambesuche an verschiedenen Orten behalten möchten. in unserem Admin-Panel
In der Ansicht, wir die folgende SQL-Abfrage verwenden
SELECT w.ID, w.DaynTime, team_Desc, co_Nome, w.team_Lat, w.team_Long
FROM (SELECT MAX(ID) AS maxID FROM VlocationTab GROUP BY UserID) AS aux
INNER JOIN VlocationTab AS w ON w.ID = aux.maxID;
Hier ist die Erklärung
CREATE TABLE `TableName` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`UserID` varchar(15) NOT NULL,
`Lat` double(8,6) NOT NULL,
`Long` double(8,6) NOT NULL,
`DayTime` datetime NOT NULL,
`User` varchar(15) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`AUser` varchar(15) DEFAULT NULL,
`ADate` datetime DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `DataTime` (`DayTime`),
KEY `Coordenates` (`Lat`,`Long`)
) ENGINE=MyISAM AUTO_INCREMENT=1040384 DEFAULT CHARSET=utf8;
Gibt es trotzdem, um diese Abfrage zu optimieren, um die Ausführungszeit erstellen zu minimieren Bitte ?
Haben Sie Indizes? Haben Sie versucht, EXPLAIN in Ihrer MySQL-Abfrage auszuführen? Nicht sicher, warum diese Frage mit PHP getaggt ist. – Maximus2012
Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql- Abfrage . Gemäß dem obigen Kommentar erfordern Fragen zur Abfrageleistung immer CREATE TABLE-Anweisungen für alle relevanten Tabellen sowie EXPLAIN. – Strawberry
@ Maximus2012 haben wir drei Indizes, einen auf Primärschlüssel, andere auf Datum und Uhrzeit und 3. auf Lat und Long. Versucht zu erklären, aber verstehe nicht viel. –