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

Pengoptimalan kueri penggunaan indeks MySQL

Beberapa hal... Saya akan memiliki indeks gabungan TUNGGAL di( a_id, job, state, start_time )

Ini untuk membantu mengoptimalkan kueri pada semua kriteria, dalam apa yang saya yakini sebagai urutan yang paling sesuai. Satu "A_ID", lalu dua pekerjaan, rentang status kecil, lalu berbasis waktu. Selanjutnya, perhatikan tidak ada tanda kutip... Tampaknya Anda mengonversi perbandingan numerik ke string, biarkan sebagai numerik untuk perbandingan -- lebih cepat daripada string.

Juga, dengan memiliki semuanya sebagai bagian dari indeks, ini adalah indeks PENUTUP yang berarti TIDAK harus pergi ke data halaman mentah untuk mendapatkan nilai lain untuk menguji catatan yang memenuhi syarat untuk disertakan atau tidak.

SELECT 
      count(*) AS tries 
   FROM 
      tasks
   WHERE 
          a_id = 614
      AND job IN ( 1, 3 ) 
      AND state > 80 AND state < 100 
      AND start_time >= 1386538013;

Sekarang, mengapa indeks... pertimbangkan skenario berikut. Anda memiliki dua kamar yang memiliki kotak... Di ruang pertama, setiap kotak adalah "a_id", di dalamnya adalah pekerjaan yang diurutkan, di dalam setiap pekerjaan adalah rentang status, dan terakhir berdasarkan waktu mulai.

Di ruangan lain, kotak Anda diurutkan berdasarkan waktu mulai, di dalam a_id itu diurutkan, dan akhirnya dinyatakan.

Yang akan lebih mudah untuk menemukan apa yang Anda butuhkan. Begitulah seharusnya Anda berpikir tentang indeks. Saya lebih suka pergi ke satu kotak untuk "A_ID =614", lalu lompat ke Pekerjaan 1 dan yang lain untuk Pekerjaan 3. Dalam setiap Pekerjaan 1, Pekerjaan 3, ambil 80-100, lalu waktu. Namun Anda lebih mengetahui data dan volume Anda dalam setiap pertimbangan kriteria dan dapat menyesuaikan.

Akhirnya, count(ID) vs count(*). Yang saya pedulikan hanyalah rekor yang memenuhi syarat. Saya tidak perlu mengetahui ID sebenarnya karena kriteria pemfilteran sudah memenuhi syarat sebagai termasuk atau tidak, mengapa mencari (dalam hal ini) "ID" yang sebenarnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mendapatkan Rekam dengan Nilai Maks di MySQL

  2. JPA EclipseLink DatabaseException:'tabel foo.SEQUENCE tidak ada'

  3. Mysql mengubah ' menjadi '?

  4. Cara yang lebih baik menyimpan kata sandi di mysql yang dapat didekripsi juga menggunakan php

  5. mysql dengan nilai yang dipisahkan koma