Saya mencoba mengindeks blogentriesdatabase saya untuk kinerja yang lebih baik tetapi menemukan masalah.
Berikut adalah strukturnya:
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;
Kueri seperti berikut ini menggunakan indeks dengan benar:
EXPLAIN SELECT id_id,title_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | id | select_type | meja | ketik | mungkin_kunci | kunci | key_len | ref | baris | Ekstra | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- + | 1 | SEDERHANA | blogentries | indeks | NULL | UTAMA | 114 | NULL | 126 | Menggunakan indeks | + ---- + ------------- + ------------- + ------- + -------- ------- + --------- + --------- + ------ + ------ + -------- ----- +
Namun, ketika saya menambahkan entry_idke dalam SELECTkueri itu menggunakan filesort
EXPLAIN SELECT id_id,title_id,entry_id FROM blogentries ORDER by id_id DESC
+ ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | id | select_type | meja | ketik | mungkin_kunci | kunci | key_len | ref | baris | Ekstra | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- + | 1 | SEDERHANA | blogentries | SEMUA | NULL | NULL | NULL | NULL | 126 | Menggunakan filesort | + ---- + ------------- + ------------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ ---- +
Saya bertanya-tanya mengapa ini terjadi dan bagaimana saya bisa menghindarinya? Apakah karena VarChar, dan itu harus diubah menjadi sesuatu yang lain?
Saya mencoba agar semua pertanyaan saya menggunakan indeks karena saya menjalankan nilai yang tinggi Handler_read_rnddan Handler_read_rnd_next.
Jika Anda memerlukan info lain, saya dapat mempostingnya juga.
WHERE 1=1ke permintaan kedua Anda.