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

Urutan SQL berdasarkan elemen dari klausa IN

Meskipun logika Anda dan solusi di atas bagus untuk skala kecil, jika Anda berbicara tentang lebih dari 65000 item, Anda memerlukan solusi yang skalabel.

Saran saya adalah untuk membagi tugas ini menjadi 2 langkah.

Langkah 1

Buat tabel sementara, Tabel sementara ini akan memiliki 3 kolom minumum

TEMP_ITEM_ORDER_TABLE (
  session_key varchar2(50),
  item_id number,
  item_report_order number
)

Setiap kali pengguna memesan kueri seperti itu, masukkan data, yaitu id item dan no urutnya ke dalam tabel sementara ini dengan beberapa kunci unik untuk mengidentifikasi sesi pengguna (mungkin id pengguna atau id sesi). Trik ini untuk menghindari tabrakan daftar item saat beberapa pengguna secara bersamaan mengaktifkan laporan.

Langkah 2

Sekarang jalankan kueri laporan Anda dengan bergabung dengan tabel utama Anda, tabel sementara dengan session_key . Dalam data pesanan kueri berdasarkan pesanan input Anda (sudah disimpan di tabel temp)

SELECT 
  T1.* , T2.item_report_order
FROM ITEM T1, TEMP_ITEM_ORDER_TABLE T2
  WHERE T1.ITEM_ID = T2.ITEM_ID
  AND T2.session_key = :input_session_key
  ORDER BY t2.item_report_order

Cara ini adalah

  1. agnostik basis data
  2. dapat diskalakan dengan sejumlah masukan
  3. Memberikan performa terbaik

Catatan:Untuk lebih meningkatkan kinerja kueri, buat indeks pada session_key, item_id di tabel temp juga buat indeks pada item_id pada tabel ITEM (jika belum ada)

Sunting:Oracle menawarkan Tabel Sementara Global fitur, yang dibuat memiliki fitur untuk mengizinkan catatan hanya dengan sesi dan pembersihan otomatis saat komit/akhir sesi dll. Anda dapat menggunakan fitur ini dan menghindari kunci sesi, tetapi solusi ini tidak dapat direplikasi pada produk database lain kecuali mereka mendukung fitur serupa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PILIH dari tabel dengan daftar VARIASI IN dalam klausa WHERE

  2. Oracle memilih nilai hingga ruang pertama atau akhir baris

  3. Menggunakan sql/plsql, bagaimana Anda mengetahui set karakter mana yang digunakan teks?

  4. Pencegahan SQL Injection dengan query SQL ALTER USER dinamis

  5. Bagaimana cara mengekspor data bidang gumpalan di pengembang Oracle sql