Saya mencoba mengindeks blogentries
database 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_id
ke dalam SELECT
kueri 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_rnd
dan Handler_read_rnd_next
.
Jika Anda memerlukan info lain, saya dapat mempostingnya juga.
WHERE 1=1
ke permintaan kedua Anda.