Rumah  >  Artikel  >  pangkalan data  >  Apakah filesort dalam mysql

Apakah filesort dalam mysql

青灯夜游
青灯夜游asal
2022-11-11 17:21:102519semak imbas

Dalam mysql, filesort merujuk kepada pengisihan fail, yang mengisih data yang diperolehi dalam ingatan melalui algoritma pengisihan yang sepadan. Terdapat dua jenis isihan fail: 1. Isih dwi-hala, yang mula-mula mengeluarkan medan pengisihan yang sepadan dan maklumat penuding baris yang boleh mengesan data baris secara terus mengikut keadaan yang sepadan, dan kemudian mengisihnya dalam penimbal isihan 2 . Pengisihan satu hala, iaitu pengisihan sekali Keluarkan semua medan baris yang memenuhi syarat, dan kemudian isikannya dalam penimbal isihan.

Apakah filesort dalam mysql

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Terdapat dua kaedah pelaksanaan pengisihan untuk ORDER BY dalam MySQL:

1. Gunakan indeks tersusun untuk mendapatkan data tersusun
2. Pengisihan fail (isihan fail)

Apabila menganalisis pertanyaan dalam explain, gunakan indeks yang dipesan untuk mendapatkan data yang dipesan dan paparan Menggunakan indeks, dan paparan pengisihan fail Menggunakan fileso rt.

Hanya apabila semua lajur dalam ORDER BY mesti disertakan dalam indeks yang sama, dan susunan indeks adalah betul-betul sama dengan susunan dalam susunan mengikut klausa dan arah pengisihan daripada semua lajur (tertib menaik atau tertib menurun) adalah sama, (mencampurkan mod ASC dan mod DESC tidak menggunakan indeks)

Gabungan di mana pernyataan dan susunan mengikut penyataan memenuhi paling kiri awalan

Dalam kes lain, gunakan pengisihan fail seperti berikut:

1) di mana pernyataan dan susunan demi pernyataan , menggunakan indeks yang berbeza

  2) Menyemak terlalu banyak baris dan tidak menggunakan indeks penutup

  3 ) ORDER BY Columns tidak termasuk dalam indeks yang sama, iaitu indeks yang berbeza digunakan 5) Lajur indeks dalam pernyataan where atau ORDER BY menggunakan ungkapan, termasuk ungkapan fungsi

. ∼ 6) Gabungan pernyataan where dan pernyataan ORDER BY memenuhi awalan paling kiri, tetapi dalam pernyataan where Perkara yang dicari ialah julat.

failsort

failsort ini tidak bermakna mengisih melalui fail cakera, tetapi hanya memberitahu kami bahawa operasi isihan telah dilakukan. Iaitu, dalam pelan pelaksanaan yang diberikan oleh MySQL Query Optimizer (dilihat melalui arahan EXPLAIN), ia dipanggil pengisihan fail (failsort)

Pengisihan fail adalah untuk mengisih data yang diperolehi dalam ingatan melalui algoritma pengisihan yang sepadan. : MySQL perlu mengisih data dalam memori, dan kawasan memori yang digunakan ialah kawasan pengisihan yang ditetapkan oleh pembolehubah sistem sort_buffer_size. Kawasan pengisihan ini eksklusif untuk setiap Benang, jadi mungkin terdapat berbilang kawasan memori penimbal isihan dalam MySQL pada masa yang sama. Isih fail dibahagikan kepada dua jenis

Isih dua hala

: Pertama, medan isihan yang sepadan dikeluarkan mengikut keadaan yang sepadan dan data baris boleh didapati terus maklumat penunjuk baris kemudian diisih dalam penimbal isihan. Selepas mengisih, medan pertanyaan dikeluarkan mengikut penuding baris, dan cakera IO dilaksanakan dua kali.

  • Isih sehala

    : Ia mengeluarkan semua medan baris yang memenuhi syarat pada satu masa, dan kemudian mengisihnya dalam penimbal isihan. Jalankan cakera io sekali.

  • MySQL terutamanya menentukan algoritma pengisihan yang perlu digunakan dengan membandingkan saiz parameter sistem max_length_for_sort_data yang kami tetapkan dan jumlah saiz jenis medan yang diambil oleh pernyataan Pertanyaan. Jika max_length_for_sort_data lebih besar, algoritma dioptimumkan kedua digunakan, jika tidak, algoritma pertama digunakan. Jadi jika anda mahu kecekapan operasi ORDER BY setinggi mungkin, anda mesti berhati-hati tentang tetapan parameter max_length_for_sort_data. Pangkalan data rakan sekerja pernah mengalami jumlah menunggu pengisihan yang banyak, mengakibatkan beban sistem yang tinggi dan masa tindak balas yang panjang Akhirnya, didapati bahawa ia adalah kerana MySQL menggunakan algoritma pengisihan pertama tradisional Selepas meningkatkan max_length_for_sort_data Selepas menukar nilai parameter, sistem beban dengan serta-merta sangat lega dan tindak balas adalah lebih cepat.
  • Jika susunan mengikut klausa hanya merujuk jadual pertama dalam gabungan, MySQL akan mengisih jadual pertama dahulu dan kemudian bergabung. Iaitu, Menggunakan Filesort of Extra in expain Jika tidak, MySQL mula-mula menyimpan hasil ke jadual sementara (Temporary Table), dan kemudian mengisih data dalam jadual sementara Pada masa ini, Extra in expain memaparkan Menggunakan sementara Menggunakan Filesort .

    [Cadangan berkaitan: tutorial video mysql]

Atas ialah kandungan terperinci Apakah filesort dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn