Partition By clause boleh digunakan untuk meningkatkan prestasi pertanyaan. Ia mengurangkan keperluan storan dan meningkatkan kebolehurusan data. Dengan membahagikan jadual besar, pertanyaan yang mengakses hanya sebahagian kecil data boleh dilaksanakan dengan lebih pantas. Pembahagian juga mengurangkan masa sandaran dan pemulihan. Dalam artikel ini, kita akan membincangkan Klausa Partition By dalam MySQL dengan sintaks dan pelbagai contoh.
Tujuan klausa PARTITION BY adalah untuk mengumpulkan baris jadual ke dalam partition yang berasingan. Ini amat berguna apabila melakukan pengiraan pada baris tertentu dalam partition menggunakan baris lain dalam partition yang sama.
PARTITION BY clause mesti sentiasa digunakan dalam klausa OVER(). Partition yang dicipta oleh klausa PARTITION BY juga dipanggil tingkap. Klausa ini beroperasi secara khusus pada fungsi tetingkap seperti RANK(), LEAD(), dan LAG().
Jika anda mengecualikan klausa PARTITION BY daripada klausa OVER(), keseluruhan jadual akan dianggap sebagai partition tunggal.
Window_function ( expression ) Over ( partition by expr [order_clause] [frame_clause] )
klausa_tertib dan klausa_rangka ialah komponen pilihan tatabahasa.
Dalam MySQL, ungkapan dalam klausa Partition boleh menjadi nama lajur atau fungsi terbina dalam. Walau bagaimanapun, dalam SQL standard, hanya nama lajur dibenarkan dalam ungkapan.
Mari kita ambil jadual "Penggodam" sebagai contoh -
h_id |
h_name |
cabaran_id |
Skor |
---|---|---|---|
3 |
Raju |
111 |
20 |
2 |
Mishlesh |
111 |
80 |
5 |
Rudra |
112 |
40 |
5 |
Mohan |
114 |
90 |
4 |
Rohan |
112 |
30 |
1 |
Sohan |
112 |
40 |
Kita perlu menentukan kedudukan setiap penggodam dalam setiap cabaran. Dalam erti kata lain, kita perlu menyenaraikan semua penggodam yang menyertai cabaran dan kedudukan masing-masing dalam cabaran itu.
Untuk mencapai ini, kami menggunakan pertanyaan berikut:
select challenge_id, h_id, h_name, score, dense_rank() over ( partition by challenge_id order by score desc ) as "rank", from hacker;
Dalam pertanyaan ini, partition by clause mengumpulkan jadual mengikut challenge_id.
Tertib mengikut klausa mengisih penggodam dalam setiap partition dalam susunan skor menurun.
Klausaover() menentukan cara membahagi dan mengisih baris jadual untuk kedudukan fungsi tetingkap().
Fungsi tetingkap dense_rank() memberikan pangkat kepada setiap penggodam dalam partition tersusun cabaran. Jika dua penggodam mempunyai skor yang sama, mereka diberikan kedudukan yang sama.
Hasil keluaran menunjukkan senarai semua penggodam dan kedudukan masing-masing untuk setiap cabaran -
cabaran_id |
h_id |
h_name |
Skor |
Kedudukan |
---|---|---|---|---|
111 |
2 |
Mishlesh |
80 |
1 |
111 |
3 |
Raju |
20 |
2 |
112 |
Rudra |
40 |
1 |
|
112 |
1 |
Sohan |
40 |
1 |
112 | 4 |
Rohan |
30 |
2 |
114 |
5 |
Mohan |
90 |
1 |
Jadi kami berjaya mendapatkan senarai semua penggodam dan kedudukan mereka dalam setiap cabaran individu.
Kumpulkan baris jadual ke dalam partition berasingan untuk melakukan pengiraan pada baris tertentu dalam partition.
Kurangkan keperluan storan dan tingkatkan kebolehurusan data.
Tingkatkan prestasi pertanyaan dengan melaksanakan pertanyaan yang mengakses hanya sebahagian kecil data anda dengan lebih pantas.
Kurangkan masa sandaran dan pemulihan.
Atas ialah kandungan terperinci MySQL PARTITION OLEH klausa anak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!