Rumah >pangkalan data >tutorial mysql >Bagaimanakah klausa `PARTITION BY` dan `KEEP` berbeza dalam pembahagian data Oracle?

Bagaimanakah klausa `PARTITION BY` dan `KEEP` berbeza dalam pembahagian data Oracle?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 05:19:17165semak imbas

How do `PARTITION BY` and `KEEP` clauses differ in Oracle's data partitioning?

PARTITION BY dengan dan tanpa KEEP dalam Oracle

Apabila membahagikan data dalam Oracle, terdapat dua pilihan utama yang tersedia: PARTITION BY dan KEEP. Kedua-dua pilihan boleh digunakan untuk mengumpulkan data kepada subset yang lebih kecil, tetapi ia mempunyai kesan yang berbeza pada data yang terhasil.

PARTITITION BY

Klausa PARTITION BY digunakan untuk membahagikan jadual kepada sekatan yang lebih kecil berdasarkan satu atau lebih lajur. Data dalam setiap partition disimpan secara berasingan daripada data dalam partition lain. Ini boleh meningkatkan prestasi untuk jenis pertanyaan tertentu, seperti pertanyaan yang menapis data mengikut nilai lajur tertentu.

Sebagai contoh, pertanyaan berikut menggunakan klausa PARTITION BY untuk membahagikan jadual empl kepada partition berdasarkan deptno ruangan:

SELECT empno,
       deptno,
       sal,
       MIN(sal) OVER (PARTITION BY deptno) AS "Lowest",
       MAX(sal) OVER (PARTITION BY deptno) AS "Highest"
FROM empl;

Pertanyaan ini akan mengembalikan gaji terendah dan tertinggi bagi setiap jabatan. Data untuk setiap jabatan akan disimpan dalam partition berasingan, yang akan meningkatkan prestasi untuk pertanyaan yang menapis data mengikut jabatan.

KEEP

Klausa KEEP digunakan untuk tentukan baris mana yang perlu disimpan daripada setiap partition. Klausa KEEP boleh digunakan dengan sama ada klausa PARTITION BY atau klausa DISTINCT.

Apabila digunakan dengan klausa PARTITION BY, klausa KEEP menentukan baris mana yang perlu disimpan daripada setiap partition. Sebagai contoh, pertanyaan berikut menggunakan klausa KEEP untuk menyimpan hanya baris pertama daripada setiap partition:

SELECT empno,
       deptno,
       sal,
       MIN(sal) OVER (PARTITION BY deptno) AS "Lowest",
       MAX(sal) OVER (PARTITION BY deptno) AS "Highest"
FROM empl
KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno);

Pertanyaan ini akan mengembalikan gaji terendah dan tertinggi untuk setiap jabatan, tetapi ia hanya akan mengembalikan baris pertama daripada setiap partition. Ini boleh berguna untuk pertanyaan yang perlu mengembalikan bilangan baris yang terhad atau untuk pertanyaan yang perlu mengembalikan data dalam susunan tertentu.

Perbezaan antara PARTITION BY dan KEEP

Perbezaan utama antara PARTITION BY dan KEEP ialah PARTITION BY membahagikan data kepada partition yang lebih kecil, manakala KEEP menentukan yang mana baris untuk disimpan dari setiap partition. PARTITION BY boleh digunakan untuk meningkatkan prestasi bagi jenis pertanyaan tertentu, manakala KEEP boleh digunakan untuk mengehadkan bilangan baris yang dikembalikan oleh pertanyaan atau untuk mengembalikan data dalam susunan tertentu.

Atas ialah kandungan terperinci Bagaimanakah klausa `PARTITION BY` dan `KEEP` berbeza dalam pembahagian data Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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