Sto cercando di indicizzare il mio blogentries
database per prestazioni migliori ma ho riscontrato un problema.
Ecco la struttura:
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;
Una query come la seguente utilizza correttamente l'indice:
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | id | select_type | tabella | digitare | possible_keys | chiave | key_len | rif | righe | Extra | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | 1 | SEMPLICE | blogentries | indice | NULL | PRIMARIO | 114 | NULL | 126 | Utilizzando l'indice | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
Tuttavia, quando aggiungo il comando entry_id
nella SELECT
query, utilizza il filesort
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | id | select_type | tabella | digitare | possible_keys | chiave | key_len | rif | righe | Extra | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | 1 | SEMPLICE | blogentries | TUTTO | NULL | NULL | NULL | NULL | 126 | Utilizzo di filesort | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
Mi chiedevo perché questo stesse accadendo e come posso evitarlo? È dovuto al VarChar
, e che dovrebbe essere cambiato in qualcos'altro?
Sto cercando di fare in modo che tutte le mie query utilizzino l'indice mentre sto eseguendo valori alti Handler_read_rnd
e Handler_read_rnd_next
alti.
Se hai bisogno di altre informazioni, posso pubblicarle anche io.
WHERE 1=1
alla tua seconda query.
SELECT @@sort_buffer_size
)?