2016-04-15 19 views
1

私はInnoDB〜50MB(〜500.000エントリ)のテーブルを持っています。MySQLクエリパフォーマンス(InnoDB)

テーブルの構造:IDのuser_id情報


Querys:

私はよりIDが高いこのユーザーの次のエントリを取得したいと思います10:

SELECT * FROM `table` WHERE `user_id`=1 AND `id` > 10 LIMIT 1 (レスポンス:〜0.5msの)


私は300000よりも高いIDを持つこのユーザーの次のエントリを取得したいと思います:

SELECT * FROM `table` WHERE `user_id`=1 AND `id` > 300000 LIMIT 1 (レスポンス:〜215ms


私はいくつかのインデックスを試してみましたが、誰も応答時間を減少させない:

ALTER TABLE table ADD INDEX (user_id, id);


どのように私はこのケースでパフォーマンスを向上させることができますか? idがあなたのPRIMARY KEYであることを提供

+3

両方のクエリで 'explain'を共有できますか? –

+0

応答時間の測定方法、返される行の数、 'info'は大量のデータを含むBLOBです。 – Uueerdo

+0

@RC質問が更新されました。 –

答えて

0

、あなたはこのインデックスを作成する必要があります指標として、(user_id, id)に実際になります

SELECT * 
FROM `table` 
WHERE `user_id` = 1 
     AND `id` > 300000 
ORDER BY 
     id 
LIMIT 1 

ALTER TABLE table ADD INDEX (user_id); 

し、あなたのクエリにORDER BY条件を追加しますインデックスキーに欠けている主キー列は、すべてのInnoDBセカンダリインデックスの末尾部分です。