Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kinerja:rank() vs sub-kueri. Sub permintaan memiliki biaya lebih rendah?

Saya tidak begitu yakin apa pertanyaan Anda. Ya, menurut dua rencana eksekusi ini, dalam hal ini, metode subquery memiliki biaya yang diharapkan lebih rendah. Tampaknya tidak terlalu mengejutkan, karena ia dapat menggunakan indeks untuk dengan sangat cepat menemukan baris yang tepat yang Anda minati. Khususnya dalam kasus ini, subquery hanya perlu melakukan pemindaian indeks PK dengan sangat cepat. Situasinya mungkin berbeda jika subquery melibatkan kolom yang bukan bagian dari indeks.

Kueri menggunakan rank() harus mendapatkan semua baris yang cocok dan memberi peringkat. Saya tidak percaya bahwa pengoptimal memiliki logika hubung singkat untuk mengenali bahwa ini adalah kueri top-n dan oleh karena itu menghindari pengurutan lengkap, meskipun yang Anda pedulikan hanyalah baris peringkat teratas.

Anda juga dapat mencoba formulir ini, yang harus dikenali oleh pengoptimal sebagai kueri top-n. Saya berharap dalam kasus Anda bahwa itu hanya memerlukan pemindaian rentang tunggal pada indeks diikuti oleh akses tabel.

select * 
  from (select *
          from teste_rank r
          where data_mov <= trunc(sysdate) 
            and codigo = 1
        order by data_mov desc)
  where rownum=1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan banyak catatan di oracle

  2. Penyetelan kinerja Oracle

  3. ORA-01000:kursor terbuka maksimum terlampaui di asp.net

  4. Perbedaan antara notasi Oracle plus (+) dan notasi ANSI JOIN?

  5. Mengapa Oracle mengatakan bukan ekspresi GROUP BY?