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

Pilih baris induk hanya jika tidak memiliki anak

SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL

kamu bisa melakukan ini. gabungan luar seharusnya menghasilkan sedikit kinerja, tetapi tidak banyak.

sistem database baru mungkin akan tetap mengoptimalkan kueri Anda sehingga tidak akan ada perbedaan.

cara yang benar di sini adalah caching! coba cacher kueri dan cache level aplikasi jika memungkinkan.

tentu saja Anda memerlukan indeks yang tepat.

dan maksud saya sebenarnya pada kedua tabel dan lebih disukai indeks hash karena akan memiliki waktu pencarian statis dibandingkan dengan pohon apa pun yang memiliki logaritmik

Coba berikan penjelasan sebelum kueri untuk melihat apa yang sebenarnya memperlambat ini.

jika Anda benar-benar membutuhkan ini untuk menjadi cepat, Anda dapat mengubah struktur data Anda.

Anda mungkin bisa membuat pemicu untuk menandai sebuah bendera di tabel A apakah ada entri yang sesuai di tabel. tentu saja redundansi data id ini, tetapi terkadang sepadan. anggap saja itu sebagai caching.

satu pemikiran terakhir:Anda dapat mencoba SELECT id FROM A WHERE id NOT IN (SELECT id FROM B) ini mungkin sedikit lebih cepat karena tidak diperlukan penyambungan yang sebenarnya, namun mungkin juga lebih lambat karena pencarian di set be akan menjadi pemindaian penuh. Saya tidak begitu yakin bagaimana ini akan diproses, tetapi mungkin patut dicoba.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan pemasangan mysql-python:Tidak dapat membuka sertakan file 'config-win.h'

  2. Menentukan secara efisien apakah bisnis buka atau tidak berdasarkan jam buka toko

  3. org.hibernate.InstantiationException:Tidak ada konstruktor default untuk entitas::principal.Cliente

  4. Bagaimana sprintf() melindungi dari injeksi SQL?

  5. Kueri Pilih Lintas Server MySQL