Estoy tratando de indexar mi blogentries
base de datos para un mejor rendimiento, pero encontré un problema.
Aquí está la estructura:
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 consulta como la siguiente utiliza el índice correctamente:
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + El | id | select_type | mesa | tipo | posibles_claves | clave | key_len | ref | filas | Extra | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + El | 1 | SIMPLE | blogentries | indice | NULL | PRIMARIO | 114 NULL | 126 Usando index | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
Sin embargo, cuando agrego el entry_id
en la SELECT
consulta, usa el ordenamiento de archivos
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + El | id | select_type | mesa | tipo | posibles_claves | clave | key_len | ref | filas | Extra | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + El | 1 | SIMPLE | blogentries | TODOS | NULL | NULL | NULL | NULL | 126 Usando ordenar archivos | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
Me preguntaba por qué sucede esto y cómo puedo evitarlo. ¿Se debe al VarChar
, y eso debería cambiarse a otra cosa?
Estoy tratando de hacer que todas mis consultas usen el índice, ya que me encuentro con valores Handler_read_rnd
y Handler_read_rnd_next
valores altos.
Si necesita alguna otra información, también puedo publicarla.
WHERE 1=1
a su segunda consulta.
SELECT @@sort_buffer_size
)?