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

Cache/Gunakan Kembali Subquery di MySQL

Lihat apa yang EXPLAIN EXTENDED katanya.

Jika tertulis DEPENDENT SUBQUERY atau UNCACHEABLE SUBQUERY , maka akan dievaluasi ulang setiap kali digunakan.

Ini terjadi jika subkueri menggunakan variabel sesi atau subkueri yang berkorelasi.

Jika tidak, kemungkinan besar akan di-cache.

Jika kasus Anda, subquery tidak akan di-cache, subquery akan dievaluasi ulang di setiap UNION telah ditetapkan.

Namun, subquery Anda tampaknya terlalu rumit. Mengapa Anda tidak menggunakan saja:

SELECT id
FROM   playlist_program_map ppm, programs p
WHERE  ppm.playlist_id = 181
       AND p.id = ppm.program_id
       AND submitter_id = 32
       AND feed_id = 2478

Jika Anda memiliki indeks di playlist_program_map (playlist_id) , kueri ini akan berfungsi seperti pesona.

Bisakah Anda memberi tahu saya dua hal lagi:

  1. Ada berapa baris di playlist_program_map dan berapa banyak DISTINCT playlist_id nilai-nilai yang ada?
    • Berapa banyak baris dalam programs dan berapa banyak DISTINCT submitter_id, feed_id ada pasangan?

Dari komentar Anda, saya dapat menyimpulkan bahwa ada 10 programs per playlist rata-rata, dan 200 programs per (submitter, feed) pasangan. Ini berarti indeks Anda di playlist_program_map lebih selektif daripada yang ada di (submitter, feed) , dan playlist_program_map harus memimpin dalam bergabung.

Indeks teks lengkap dalam kasus Anda juga tampaknya tidak terlalu selektif, mengingat Anda harus bergabung dengan 10 program dari 2.000.000 .

Sebaiknya Anda mencoba yang berikut ini:

SELECT object_id, programs.created AS created
FROM   playlist_program_map ppm, programs p, comments_programs cp
WHERE  ppm.playlist_id = 181
       AND p.id = ppm.program_id
       AND p.submitter_id = 32
       AND p.feed_id = 2478
       AND cp.object_id = p.id
       AND cp.text REGEXP 'excellent'

, dan ulangi ini untuk ketiga tabel.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengurutkan hasil MySQL dengan huruf terlebih dahulu, simbol terakhir?

  2. periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat '' di baris 1

  3. Apa itu PANJANG () di MySQL?

  4. SQL pisahkan baris yang dipisahkan koma

  5. Bagaimana cara memasukkan beberapa nilai kotak centang ke dalam tabel?