Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pengindeksan MySQL dan Menggunakan filesort

Dalam kueri pertama Anda, ORDER BY dilakukan menggunakan views_point INDEX, karena digunakan di bagian WHERE dari kueri dan oleh karena itu di MySQL dapat digunakan untuk menyortir.

Dalam kueri kedua, MySQL menyelesaikan bagian WHERE menggunakan indeks yang berbeda, listing_pcs . Ini tidak dapat digunakan untuk memenuhi kondisi ORDER BY. MySQL menggunakan filesort sebagai gantinya, yang merupakan opsi terbaik jika indeks tidak dapat digunakan.

MySQL hanya menggunakan indeks untuk mengurutkan jika indeks sama dengan yang digunakan pada kondisi WHERE. Inilah manual dimaksud dengan:

Jadi apa yang bisa kamu lakukan:

  1. Coba tingkatkan sort_buffer_size your Anda config untuk membuat penyortiran file seefektif mungkin. Hasil besar yang terlalu besar untuk buffer pengurutan menyebabkan MySQL memecah pengurutan menjadi beberapa bagian, yang lebih lambat.

  2. Paksa MySQL untuk memilih indeks yang berbeda. Perlu dicatat bahwa versi MySQL yang berbeda memilih indeks default secara berbeda. Versi 5.1, misalnya, sangat buruk karena Pengoptimal Kueri telah banyak ditulis ulang untuk rilis ini dan membutuhkan banyak penyempurnaan. Versi 5.6 cukup bagus.

    SELECT *
    FROM listings
    FORCE INDEX (views_point)
    WHERE (`publishedon_hourly` BETWEEN
           UNIX_TIMESTAMP( '2015-09-5 00:00:00' )
           AND UNIX_TIMESTAMP( '2015-09-5 12:00:00' ))
      AND (published =1)
      AND cat_id IN ( 1, 2, 3, 4, 5 )
    ORDER BY `views_point` DESC
    LIMIT 10
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membaca tanda-tanda seperti dari database MySql

  2. Basis data:Cara kinerja terbaik untuk menanyakan data lokasi geografis?

  3. Apa efek menggunakan susunan biner?

  4. Hapus nol di belakang dalam nilai desimal dengan mengubah panjang

  5. MySQL:Memisahkan tabel besar menjadi partisi atau tabel terpisah?