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

Indeks MySQL untuk Grup Berdasarkan / Pesan Berdasarkan

Ini akan membantu Anda. Tulis ulang kueri Anda sebagai berikut:

SELECT c1, Sum(c2) 
FROM table 
WHERE c4 = 2011 
AND c5 = 0 
AND c6 In (6,9,11)
AND c3 IS NOT NULL   
GROUP BY c1

Sekarang buat indeks komposit pada kolom (c4, c5, c6) dengan kolom DALAM ORDER ITU. Kolom dalam indeks Anda akan muncul dalam urutan yang sama dengan kolom di klausa WHERE Anda. Jika tidak, indeks tidak akan berfungsi. Selektivitas indeks ini cukup sempit sehingga pengurutan file pada tabel sementara (untuk grup menurut) harus cepat.

Alasan untuk memindahkan c3 ke akhir kueri adalah sebagai berikut. Sebagai contoh, mari kita asumsikan bahwa c3 dapat mengambil nilai antara 0 dan 100 (atau bisa NULL). Jika Anda menjalankan kueri "IS NOT NULL", maka Mysql perlu melintasi hampir semua indeks B-Tree kecuali tepi yang sesuai dengan NULL. Oleh karena itu, MySQL memutuskan bahwa pemindaian tabel penuh adalah pilihan yang lebih mudah daripada berjalan melalui semua jalur yang berbeda dalam indeks. Di sisi lain, Anda akan melihat bahwa jika kueri Anda adalah "IS NULL" dan indeks Anda adalah (c3, c4, c5, c6) maka Mysql akan menggunakan indeks ini. Hal ini karena dalam hal ini Mysql hanya perlu melintasi bagian dari pohon indeks yang sesuai dengan nilai NULL.

Jenis indeks yang dibutuhkan MySQL sangat bergantung pada kueri yang dimaksud. Membuat indeks di semua kolom, seperti yang disarankan @louis, BUKAN ide yang bagus!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan Ecto dan fungsi MySQL khusus dengan variabel arity

  2. MySQL mengubah tabel dan mengonversi data dari teks ke datetime

  3. MySQL INSERT lagi jika ada UPDATE

  4. mySQL ::masukkan ke tabel, data dari tabel lain?

  5. Bagaimana cara mengubah USERNAME Dan PASSWORD MySQL?