Ich versuche, meine blogentriesDatenbank für eine bessere Leistung zu indizieren, habe jedoch ein Problem festgestellt.
Hier ist die Struktur:
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;
Eine Abfrage wie die folgende verwendet den Index ordnungsgemäß:
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | id | select_type | Tabelle | Typ | mögliche_Tasten | Schlüssel | key_len | ref | Zeilen | Extra | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | 1 | EINFACH | blogentries | Index | NULL | PRIMARY | 114 | NULL | 126 | Index verwenden | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
Wenn ich das entry_idin die SELECTAbfrage einfüge, wird jedoch der Dateisort verwendet
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | id | select_type | Tabelle | Typ | mögliche_Tasten | Schlüssel | key_len | ref | Zeilen | Extra | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | 1 | EINFACH | blogentries | ALL | NULL | NULL | NULL | NULL | 126 | Dateisortierung verwenden | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
Ich habe mich gefragt, warum das passiert und wie ich es vermeiden kann. Liegt es an dem VarChar, und das sollte in etwas anderes geändert werden?
Ich versuche, dass alle meine Abfragen den Index verwenden, da ich auf hohe Werte Handler_read_rndund Handler_read_rnd_nextWerte stoße.
Wenn Sie weitere Informationen benötigen, kann ich diese auch posten.
WHERE 1=1, Ihrer zweiten Abfrage etwas hinzuzufügen .