我一直在抓我的頭在過去的時間找到這似乎耗費了大量的時間,查詢優化優化查詢:在MySQL
SELECT d.deviceID ,e.latitude, e.longitude,MAX(e.timestamp) as timestamp
FROM Device as d INNER JOIN EventData as e ON d.deviceID=e.deviceID
WHERE e.accountID='$account' AND e.timestamp<=$time AND (e.deviceID IN (SELECT deviceID FROM DeviceList WHERE accountID='$account'))
GROUP BY (e.deviceID);
所以我查詢了一套的設備和每個設備的最後一個相關事件。
注意$帳戶/ $時間是從$ _ POST獲得變量。
編輯:表結構:
CREATE TABLE IF NOT EXISTS `Device` (
`deviceID` varchar(32) NOT NULL,
`equipmentType` varchar(40) DEFAULT NULL,
`description` varchar(128) CHARACTER SET utf8 DEFAULT NULL
);
CREATE TABLE IF NOT EXISTS `DeviceList` (
`accountID` varchar(32) NOT NULL,
`groupID` varchar(32) NOT NULL,
`deviceID` varchar(32) NOT NULL,
);
CREATE TABLE IF NOT EXISTS `EventData` (
`accountID` varchar(32) NOT NULL,
`deviceID` varchar(32) NOT NULL,
`timestamp` int(10) unsigned NOT NULL,
`statusCode` int(10) unsigned NOT NULL,
`latitude` double DEFAULT NULL,
`longitude` double DEFAULT NULL,
`gpsAge` int(10) unsigned DEFAULT NULL,
`speedKPH` double DEFAULT NULL
);
你有沒有對查詢做過「解釋」? – Derek
顯示錶結構 –
@OliverQueen我跑它,它示出了3行0:{0: 「1」,1: 「初級」,2: 「d」,3: 「ALL」,4:空,5:空,6:空,7:空,8: 「498」,...} 1:{0: 「1」,1: 「初級」,2: 「E」,3: 「REF」,4: 「初級」 ,5: 「初級」,6: 「68」,...} 2:{0: 「2」,1: 「DEPENDENT SUBQUERY」,2: 「DEVICELIST」,3: 「REF」,4: 「初級」, 5:「PRIMARY」 –