blogentries
データベースのインデックスを作成してパフォーマンスを向上させようとしていますが、問題が見つかりました。
ここに構造があります:
CREATE TABLE IF NOT EXISTS `blogentries` (
`id_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL,
`entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL,
`date_id` int(11) NOT NULL,
PRIMARY KEY (`id_id`)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1
COLLATE=latin1_german2_ci
AUTO_INCREMENT=271;
次のようなクエリは、インデックスを適切に使用します。
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | id | select_type | テーブル| タイプ| 可能性のあるキー| キー| key_len | ref | 行| エクストラ| + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | 1 | シンプル| blogentries | インデックス| NULL | プライマリー 114 | NULL | 126 | インデックスの使用| + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
ただし、クエリにを追加すると、filesortが使用entry_id
されSELECT
ます
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | id | select_type | テーブル| タイプ| 可能性のあるキー| キー| key_len | ref | 行| エクストラ| + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | 1 | シンプル| blogentries | すべて| NULL | NULL | NULL | NULL | 126 | filesortの使用| + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
なぜこれが起こっているのか、どうすれば回避できるのかと思っていました。それはによるVarChar
ものですか、それは別のものに変更する必要がありますか?
私は高いに実行しているように、すべての私のクエリがインデックスを使用していしようとしていますHandler_read_rnd
し、Handler_read_rnd_next
値。
他の情報が必要な場合は、私もそれを投稿できます。
WHERE 1=1
2番目のクエリに追加してみてください。