Ich versuche, meine blogentries
Datenbank 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_id
in die SELECT
Abfrage 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_rnd
und Handler_read_rnd_next
Werte stoße.
Wenn Sie weitere Informationen benötigen, kann ich diese auch posten.
WHERE 1=1
, Ihrer zweiten Abfrage etwas hinzuzufügen .