次のような大きなテーブルが mysql (基本的にはログ) に保存されています。
CREATE TABLE `log` (
`ID_1` int(10) unsigned NOT NULL,
`ID_2` int(10) unsigned NOT NULL,
`DELTA` tinyint(3) unsigned NOT NULL,
`ACTIVE` tinyint(1) NOT NULL,
`DATA` bigint(20) unsigned NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$
索引なし。データはランダムなデータでランダムな瞬間に挿入され、正常に動作します。次に、テーブルはオフラインになります (読み取り/書き込み操作はありません)。この時点でのテーブル サイズは約 180M レコードです。ID_1、ID_2、DELTA、ACTIVE フィールド (4 つすべて、昇順) にインデックスを追加しています。かなり高速に動作します (3 ~ 4 分)。
今、テーブルからすべてのデータを ID_1、ID_2、DELTA、ACTIVE の昇順で取得しようとしています (同じフィールドで、インデックスと同じ順序で) が、選択は 'SORTING RESULT' (SHOW で) の年齢にとどまりますPROCESSLIST) 最初の行が返されるまで。インデックスを使用するように SELECT ステートメントをヒント/強制しようとしましたが (つまり、FORCE INDEX / USE INDEX)、違いはありません。この種のクエリの応答速度を上げる方法についてのヒント:
SELECT `ID_1`, `ID_2`, `DELTA`, `ACTIVE` FROM `log` ORDER BY `ID_1`, `ID_2`, `DELTA`, `ACTIVE` ASC;
?
同様の質問がここで尋ねられました:遅い ORDER BY in large table - but without answer. そのようなものを投稿するのは良い考えだと思いましたが、今では誰かが答えを知っているかもしれません.
ありがとうございました!