J'essaie d'indexer ma blogentries
base de données pour de meilleures performances mais j'ai trouvé un problème.
Voici la structure:
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;
Une requête comme la suivante utilise correctement l'index:
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | id | select_type | table | type | touches_ possibles | clé | key_len | ref | lignes | Extra | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | 1 | SIMPLE | blogentries | index | NULL | PRIMAIRE | 114 | NULL | 126 | Utilisation de l'index | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
Cependant, lorsque j'ajoute le entry_id
dans la SELECT
requête, il utilise le filesort
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | id | select_type | table | type | touches_ possibles | clé | key_len | ref | lignes | Extra | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | 1 | SIMPLE | blogentries | TOUS | NULL | NULL | NULL | NULL | 126 | Utilisation de filesort | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
Je me demandais pourquoi cela se produit et comment je peux l'éviter? Est-ce dû à la VarChar
, et cela devrait être changé pour autre chose?
J'essaie que toutes mes requêtes utilisent l'index alors que je rencontre des valeurs élevées Handler_read_rnd
et Handler_read_rnd_next
.
Si vous avez besoin d'autres informations, je peux également les publier.
WHERE 1=1
à votre deuxième requête.
SELECT @@sort_buffer_size
)?