私はまだ次の問題があります
EXPLAIN EXTENDED SELECT
`item`.`id`,
`item`.`timestamp`,
`item`.`label`
FROM
item
WHERE
item.dataTypeId=30
GROUP BY
item.id
ORDER BY
item.timestamp DESC
LIMIT 0,6;
ID とタイムスタンプは主キーのペア (mediumint+datetime) dataTypeId は外部キー (mediumint) テーブルはInnoDbとして作成されます
ID が同じでタイムスタンプが異なる (同じアイテムのバージョン) レコードがさらに存在する可能性があります。これがgroup by の理由です。
たとえば、これを読みました:stackoverflowに関する同様のトピック
しかし、それは私の問題を解決しませんでした。
次のインデックスを作成しようとしました。
- (dataTypeId、id、timestamp) のインデックス - この順序で
- (dataTypeId, timestamp) のインデックス - この順序で
- id のインデックス
- タイムスタンプのインデックス
最後の2つは絶望の小さな断片です
何か基本的なことを見逃しているに違いないと思います
が、実際には何がわかりません。
解決策を期待しないでください(それはいいでしょう:)ちょうど私を正しい方法で蹴ってください:)
sort_buffer_size は 4194288 になりました
編集: 説明 - インデックスなし
"1" "SIMPLE" "item" "ref" "FK_dataTypeId" "FK_dataTypeId" "4" "const" "5608" "Using where; Using temporary; Using filesort"
インデックスを作成して説明する
"1" "SIMPLE" "item" "ref" "FK_udssDataItem_1,testIndexType,testIndexTypeTimestamp,testIndexTypeIdTime" "FK_udssDataItem_1" "4" "const" "5632" "Using where; Using temporary; Using filesort"