Daha blogentries
iyi performans için veritabanımı dizine eklemeye çalışıyorum, ancak bir sorun buldum.
İşte yapı:
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;
Aşağıdaki gibi bir sorgu dizini düzgün kullanır:
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- ------------- + + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | id | select_type | masa | türü | olası_anahtarlar | anahtar | key_len | ref | satırlar | Ekstra | + ---- ------------- + + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | 1 | BASİT | blog girişleri | endeksi | NULL | BİRİNCİL | 114 | NULL | 126 | Dizin kullanma | + ---- ------------- + + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
Ben eklemek Ancak, entry_id
içine SELECT
sorguda o filesort kullanır
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- ------------- + + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | id | select_type | masa | türü | olası_anahtarlar | anahtar | key_len | ref | satırlar | Ekstra | + ---- ------------- + + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | 1 | BASİT | blog girişleri | TÜM | NULL | NULL | NULL | NULL | 126 | Filesort kullanma | + ---- ------------- + + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
Bunun neden olduğunu ve bundan nasıl kaçınabileceğimi merak ediyordum? Nedeniyledir VarChar
ve bu başka bir şeye değiştirilmelidir mi?
Tüm sorgularım yüksek Handler_read_rnd
ve Handler_read_rnd_next
değerlere koşuyorum olarak dizini kullanmak için çalışıyorum .
Başka bir bilgiye ihtiyacınız varsa ben de gönderebilirim.
WHERE 1=1
İkinci sorgunuza eklemeyi deneyin .