Rumah > pangkalan data > tutorial mysql > Di dalam SQL Joins

Di dalam SQL Joins

PHPz
Lepaskan: 2024-07-18 04:28:10
asal
1120 orang telah melayarinya

Inside SQL Joins

Caburan SQL adalah asas untuk menanyakan pangkalan data, membolehkan pengguna menggabungkan data daripada berbilang jadual berdasarkan syarat yang ditetapkan. Cantuman dikategorikan kepada dua jenis utama: cantuman logik dan cantuman fizikal. Cantuman logik mewakili cara konseptual di mana data daripada jadual digabungkan, manakala cantuman fizikal merujuk kepada pelaksanaan sebenar cantuman ini dalam sistem pangkalan data seperti RDS (Perkhidmatan Pangkalan Data Perhubungan) atau pelayan SQL yang lain. Dalam catatan blog hari ini, kami akan membongkar misteri gabungan SQL.

Jom masuk!

Logik Sertai

Terdapat pelbagai jenis gabungan logik dalam SQL. Dua yang paling biasa ialah sambung Dalam dan sambung Luar. Kami menggunakan cantuman ini apabila kami perlu mendapatkan semula data daripada jadual.

Gabungan Fizikal

Gabungan fizikal dilaksanakan di dalam RDS. Pengguna menulis pertanyaan menggunakan gabungan logik dan RDS menggunakan gabungan fizikal untuk melaksanakan operasi gabungan. Terdapat pelbagai jenis gabungan fizikal seperti
1. Gabungan Gelung Bersarang
2. Hash Sertai
3. Gabung Sertai dan seterusnya

Gabungan Gelung Bersarang

Ini ialah jenis cantuman di mana jadual yang lebih kecil dengan rekod yang lebih sedikit dipilih dan digelung melalui jadual lain sehingga padanan ditemui. Jenis penyertaan ini tersedia dalam MySQL, Postgres, dan juga pelayan SQL. Walau bagaimanapun, ia bukan pilihan berskala untuk meja besar. Ia digunakan terutamanya dalam kes di mana operator gabungan tidak menggunakan kesaksamaan.

Contohnya, Pertanyaan Geospatial: Apabila berurusan dengan data geografi, anda mungkin ingin mencari titik dalam jarak tertentu dari titik lain. Ini mungkin melibatkan membandingkan jarak antara setiap gabungan mata, yang boleh dicapai dengan Gabungan Gelung Bersarang.

SELECT *
FROM cities
JOIN landmarks ON distance(cities.location, landmarks.location) < 100;
Salin selepas log masuk

Hash Sertai

Cambahan cincang ialah kaedah melaksanakan cantuman menggunakan jadual cincang untuk mencari rekod padanan. Jadual cincang dicipta dalam ingatan. Jika terdapat sejumlah besar data dan tidak ada memori yang mencukupi untuk menyimpannya, maka ia ditulis ke cakera. Gabungan cincang adalah lebih cekap daripada gabungan Gelung Bersarang. Semasa pelaksanaan, RDS membina jadual cincang dalam memori di mana baris daripada jadual gabungan disimpan menggunakan atribut gabungan sebagai kunci. Selepas pelaksanaan, pelayan mula membaca baris dari jadual lain dan mencari baris yang sepadan dari jadual cincang. Kaedah ini biasanya digunakan apabila operator gabungan menggunakan kesamaan.

Andaikan anda mempunyai jadual "Pekerja" dengan butiran pekerja seperti ID, nama dan ID jabatan serta jadual "Jabatan" dengan butiran jabatan seperti ID dan nama. Anda ingin menyertai jadual ini untuk mendapatkan jabatan yang dimiliki oleh setiap pekerja

SELECT *
FROM Employee
JOIN Department ON Employee.department_id = Department.department_id;
Salin selepas log masuk

Dalam contoh ini, syarat cantuman adalah berdasarkan kesamaan antara lajur, menjadikannya sesuai untuk cantuman cincang. Kaedah ini cekap, terutamanya apabila berurusan dengan set data yang besar, kerana ia boleh memadankan rekod dengan cepat menggunakan jadual cincang. Walau bagaimanapun, seperti mana-mana kaedah gabungan, adalah penting untuk mempertimbangkan saiz set data dan memori yang tersedia untuk memastikan prestasi optimum.

Gabung Sertai

Gabung Sertai ialah kaedah yang digunakan dalam pelaksanaan pertanyaan SQL apabila syarat cantum menggunakan operator kesamarataan dan kedua-dua belah cantuman adalah besar. Teknik ini bergantung pada input data yang diisih. Jika terdapat indeks pada ungkapan yang digunakan dalam lajur gabungan, ia boleh digunakan untuk mendapatkan data yang diisih dengan cekap. Walau bagaimanapun, jika pelayan perlu mengisih data secara eksplisit, adalah penting untuk menganalisis indeks dan mempertimbangkan untuk mengoptimumkannya untuk prestasi yang lebih baik.

Contoh:
Pertimbangkan senario yang melibatkan jadual "Jualan" dengan transaksi jualan, termasuk ID jualan, ID pelanggan dan jumlah jualan serta jadual "Pelanggan" yang mengandungi butiran pelanggan seperti ID pelanggan, nama dan lokasi.

SELECT *
FROM Sales
JOIN Customers ON Sales.customer_id = Customers.customer_id;
Salin selepas log masuk

Dalam kes ini, kedua-dua jadual "Jualan" dan "Pelanggan" adalah besar, dan syarat gabungan bergantung pada kesamaan lajur "customer_id". Untuk gabungan gabungan yang cekap, kedua-dua jadual input perlu diisih mengikut lajur gabungan ("customer_id"). Jika tiada indeks sedia ada pada lajur "customer_id", pelayan mungkin perlu melakukan operasi pengisihan tambahan, yang boleh menjejaskan prestasi.

Untuk mengoptimumkan gabungan gabungan, anda dinasihatkan untuk membuat atau mengubah suai indeks pada lajur "customer_id" dalam kedua-dua jadual. Memastikan penyelenggaraan yang betul dan pengoptimuman indeks ini boleh membawa kepada peningkatan ketara dalam prestasi pertanyaan, terutamanya untuk pertanyaan yang kerap melibatkan penyertaan berdasarkan lajur "customer_id".

Dengan memanfaatkan indeks dengan berkesan dan memastikan input data diisih, cantuman cantuman boleh mengendalikan cantuman antara jadual besar dengan keadaan cantuman berasaskan kesaksamaan dengan cekap, menyumbang kepada prestasi pertanyaan yang dipertingkatkan dan kecekapan sistem keseluruhan.

Aspect Nested Loop Join Hash Join Merge Join
Join Condition Non-equality Equality Equality
Input Data Size Small to Medium Medium to Large Large
Data Sorting Not required Not required Required
Memory Usage Low Moderate to High Moderate to High
Index Utilization Not a primary concern Beneficial Relies on indexes
Performance(large datasets) Slower Efficient Efficient
Scalability Less scalable Scalable Scalable
Typical Use Cases Small to medium-sized tables Large tables with equality joins Large tables with equality joins

Atas ialah kandungan terperinci Di dalam SQL Joins. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan