私たちは小さなモバイルアプリケーションを持っています。各チームの最後の場所を確認するためのWebベースの管理パネルがあり、そこには8-10チームがいます。大規模なテーブルから8-10レコードを取得するためのMySQLクエリの最適化
ここでは、場所を保存するテーブルが大きくなり(約800Kレコード)、dbから情報を取得するのに約10秒かかっています。
チームの履歴を別の場所に保存したいので、単に古いレコードを削除することはできません。ビューで
、私たちはここに私たちの管理パネルで
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;
を次のSQLクエリを使用しているステートメントを作成
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;
で実行時間を最小限に抑えるために、このクエリを最適化するために、とにかくがありますお願いします ?
インデックスはありますか? MySQLクエリで 'EXPLAIN'を実行しようとしましたか?なぜこの質問がPHPでタグ付けされているのか分かりません。 – Maximus2012
http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ さらに、上記のコメントに従って、問合せのパフォーマンスに関する問題は、常にすべての関連表とEXPLAINのCREATE TABLE文を必要とします。 – Strawberry
@ Maximus2012私たちは3つのインデックスを持っています.1つはプライマリキーで、もう1つは日時で、3つ目はLatとLongです。試してみたが、あまり理解していない。 –