Pertanyaan saya dalam biola adalah seperti berikut.
select * from notification where status = 0 and ( notif_id in (select notif_id from notif_user where user_id = 1) OR notif_id in (select notif_id from notif_group where group_id = 1))
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=cad284e77218eb37461e60b6308bf85f
Pertanyaan berfungsi seperti yang diharapkan. Tetapi, adakah terdapat sebarang masalah prestasi dengan pertanyaan itu. Adakah mungkin untuk menukar pertanyaan dalaman untuk menyertai?
Subkueri anda tidak bergantung pada subkueri, tetapi bebas. Iaitu, mereka tidak merujuk lajur dalam jadual
notification
anda, hanya lajur dalam jadual mereka sendiri.Jadi tiada masalah prestasi di sini.
Anda boleh menyatakan subkueri sebagai pertanyaan kesatuan dan membandingkan statistik rancangan pelaksanaan. Melihat pada output dalam fiddle, union nampaknya berprestasi lebih baik sedikit.
Cara lain untuk menyatakannya ialah menggunakan wujud