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

ORACLE dengan 2 gabungan kiri menggantung menggunakan LITERAL untuk predikat di luar GABUNG mengecualikan baris dari sebagian besar tabel KIRI

Pengamatan yang sangat menarik, meskipun saya tidak dapat mereproduksinya di database Oracle (versi 12.1.0.2.0) saya. Saya harus menyebutkan bahwa saya menggunakan Oracle Linux 6.5 dan bukan Windows. Bagaimanapun, akan lebih baik untuk memposting rencana eksekusi juga, untuk kueri yang sederhana namun menarik ini.

Terima kasih banyak telah memposting rencana eksekusi, ini menjelaskan dengan sangat baik perilaku kueri. Kemudian saya akan menjelaskan, dimulai dengan rencana eksekusi pertama:

|*  2 |   HASH JOIN        |      |     1 |    17 |     8   (0)| 00:00:01 |
|   3 |    VIEW            |      |     2 |    14 |     4   (0)| 00:00:01 |
|   4 |     SORT UNIQUE    |      |     2 |       |     4  (50)| 00:00:01 |
|   5 |      UNION-ALL     |      |       |       |            |          |
|   6 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
|   7 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
|   8 |    VIEW            |      |     2 |    20 |     4   (0)| 00:00:01 |
|   9 |     SORT UNIQUE    |      |     2 |       |     4  (50)| 00:00:01 |
|  10 |      UNION-ALL     |      |       |       |            |          |
|  11 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |
|  12 |       FAST DUAL    |      |     1 |       |     2   (0)| 00:00:01 |

Seperti yang Anda lihat, pengoptimal memilih untuk melakukan gabungan dalam, bukan gabungan kiri, dan itu ditunjukkan oleh "HASH JOIN" dan bukan "HASH JOIN OUTER" sebagaimana mestinya.

Sejujurnya, saya tidak mendengar apa pun tentang bug seperti ini (sejauh ini), jadi saya akan menyarankan yang berikut:

  • Periksa pfile/spfile jika berisi beberapa parameter yang tidak terdokumentasi.
  • Ada kasus ketika pengaturan parameter ini dapat meningkatkan kinerja, tetapi sering kali, "karma adalah ...", seperti kata pepatah, dan Anda dapat memiliki perilaku eksekusi/kinerja yang tidak terduga dengan cara yang benar-benar buruk.



  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 menginstal modul node-Oracledb pada AWS centos6 melalui baris perintah?

  2. Alasan untuk mendapatkan ORA-01422:pengambilan yang tepat mengembalikan lebih dari jumlah baris yang diminta

  3. Peningkatan otomatis di Oracle dengan seq dan pemicu - pernyataan sql tidak valid

  4. Query SQL untuk mengambil OrderID, transactionID, Status berdasarkan status transaksi yaitu Char

  5. Bagaimana cara menerapkan pengambilan batch dengan Fluent NHibernate saat bekerja dengan Oracle?