Mengapa mysql memesan dengan tidak menggunakan pengisihan indeks?
PHP中文网
PHP中文网 2017-05-18 10:44:38
0
3
984

pesanan mengikut city_id (indeks kunci utama)

pesanan mengikut country_id (tiada pengindeksan!!!)

PHP中文网
PHP中文网

认证0级讲师

membalas semua(3)
漂亮男人

City_id anda ialah kunci utama dan country_id ialah kunci utama komposit.

刘奇

ditukar kepada

SELECT * FROM city FORCE INDEX(idx_fk_country_id) ORDER BY country_id;

Itu sahaja, jika anda menanyakan lajur selain daripada indeks dalam SELECT, maka ORDER BY tidak akan menggunakan indeks. Anda boleh menggunakan FORCE INDEX untuk memaksa penggunaan indeks. SELECT中查询了索引建以外的列,那么ORDER BY就不会使用索引了。你可以用FORCE INDEX来强制使用索引。

还有一点,就是所谓的覆盖索引。覆盖索引的定义是:MySQL可以根据索引返回select字段而不用根据索引再次查询文件而得出结果。

当你使用select *时,你没有强制指定索引,那么mysql为了得到你的查询的字段而查询文件,然后再进行排序操作,这就没有用到覆盖索引。而你使用了force index就会强制使用覆盖索引,这样就不会出现filesort

Perkara lain ialah indeks penutup yang dipanggil. Takrif indeks penutup ialah: MySQL boleh mengembalikan medan select berdasarkan indeks tanpa menanyakan semula fail berdasarkan indeks untuk mendapatkan hasilnya. #🎜🎜# #🎜🎜#Apabila anda menggunakan select *, anda tidak memaksa indeks untuk ditentukan, kemudian mysql menanyakan fail untuk mendapatkan medan pertanyaan anda, dan kemudian melaksanakan operasi pengisihan ini tidak menggunakan indeks penutup. Dan jika anda menggunakan force index, ia akan memaksa penggunaan covering index, supaya filesort tidak akan berlaku. #🎜🎜#
Ty80

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!