Rumah  >  Soal Jawab  >  teks badan

Mengapa mysql memesan dengan tidak menggunakan pengisihan indeks?

pesanan mengikut city_id (indeks kunci utama)

pesanan mengikut country_id (tiada pengindeksan!!!)

PHP中文网PHP中文网2711 hari yang lalu964

membalas semua(3)saya akan balas

  • 漂亮男人

    漂亮男人2017-05-18 10:46:38

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

    balas
    0
  • 怪我咯

    怪我咯2017-05-18 10:46:38

    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. #🎜🎜#

    balas
    0
  • PHP中文网

    PHP中文网2017-05-18 10:46:38

    balas
    0
  • Batalbalas