Rumah  >  Soal Jawab  >  teks badan

Mengenai isu kecekapan pertanyaan indeks Mysql

SELECT COUNT(*) FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN ('0','2','21','22','27','11','31') AND `empty` = 0 LIMIT 1 [ RunTime:0.1423s ]
SELECT `id`,`webid`,`catid`,`path`,`pname`,`pathall`,`title`,`cdn`,`sort`,`likecount`,`fsize`,`time`,`viewcount`,`likecount` FROM `set_gif` WHERE `zhuanid` = 0 AND `webid` IN ('0','2','21','22','27','11','31') AND `empty` = 0 ORDER BY time desc,id desc LIMIT 0,10 [ RunTime:0.0045s ]

Dua pernyataan sql, masa jalan yang terakhir bermaksud masa pelaksanaan, volum data ialah 150W

Penerangan medan zhuanid ialah nilai berangka, webid ialah nilai berangka, kosong ialah 0 atau 1

Indeks biasa yang digunakan oleh SQL dalam ayat pertama ialah satu set indeks untuk zhuanid webid kosong
Indeks yang digunakan oleh SQL dalam ayat kedua ialah satu set indeks oleh zhuanid webid kosong

Mengapa kiraan dalam ayat pertama mengambil masa yang lama jika dibandingkan dengan pertanyaan kompleks dalam ayat kedua, ia mengambil masa yang sangat singkat

世界只因有你世界只因有你2675 hari yang lalu1042

membalas semua(4)saya akan balas

  • ringa_lee

    ringa_lee2017-06-22 11:56:39

    Ayat pertama ialah sql, had 1
    Ayat kedua ialah sql, had 0, 10
    Anda meminta kira untuk mengira 1.5 juta item.... Adakah anda ingin lebih cepat daripada menyemak 10 item pertama?

    balas
    0
  • PHP中文网

    PHP中文网2017-06-22 11:56:39

    Tekaan saya: Medan indeks tidak ditetapkan sebagai tidak boleh dibatalkan, menyebabkan count(*) tidak menggunakan indeks.

    Selain itu, kedua-dua kenyataan ini sendiri tidak setara

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-22 11:56:39

    Anda perlu melihat pelan pelaksanaan anda Jika set keputusan SQL pertama adalah sangat besar, anda perlu mengimbas semua rekod yang memenuhi syarat ini, SQL kedua menggunakan indeks id masa dan hanya perlu cari 10 rekod yang memenuhi syarat itu sahaja, jadi ia akan menjadi lebih cepat Selain itu, indeks gabungan zhuanid webid kosong hanya akan menggunakan lajur zhuanid dan bahagian julat webid

    balas
    0
  • 为情所困

    为情所困2017-06-22 11:56:39

    Selepas SQL pertama dilaksanakan, hasilnya disimpan dalam Cache.

    Pelaksanaan SQL kedua bergantung pada Cache SQL pertama, jadi ia akan menjadi lebih pantas (sebenarnya, SQL kedua menggunakan pengisihan, jadi ia sepatutnya lebih perlahan).

    Poster boleh melaksanakannya selepas SQL pertama dilaksanakan

    RESET QUERY CACHE;
    

    Set semula Cache dan kemudian laksanakan SQL kedua, hasilnya berbeza.

    balas
    0
  • Batalbalas