Pada beberapa tabel pengujian, akhir saya, rencana awal Anda terlihat sebagai berikut.
Itu hanya menghitung hasilnya sekali dan menyimpannya di sppol lalu memutar ulang hasil itu. Anda dapat mencoba yang berikut ini agar SQL Server melihat subkueri sebagai berkorelasi dan perlu dievaluasi ulang untuk setiap baris luar.
UPDATE table1
SET table2Id = (SELECT TOP 1 table2Id
FROM table2
ORDER BY Newid(),
table1.table1Id)
Bagi saya yang memberikan rencana ini tanpa kumparan.
Penting untuk menghubungkan bidang unik dari table1
namun demikian bahkan jika spool ditambahkan, spool harus selalu di-rebound daripada di-replay (memutar ulang hasil terakhir) karena nilai korelasi akan berbeda untuk setiap baris.
Jika tabelnya besar, ini akan lambat karena pekerjaan yang diperlukan adalah produk dari dua baris tabel (untuk setiap baris di table1
perlu melakukan pemindaian penuh table2
)