Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memilih Bilangan Baris Tertentu dalam Pelayan SQL dengan Cekap, Walaupun Melampaui Had sys.all_columns?

Bagaimanakah Saya Boleh Memilih Bilangan Baris Tertentu dalam Pelayan SQL dengan Cekap, Walaupun Melampaui Had sys.all_columns?

Barbara Streisand
Lepaskan: 2024-12-28 16:13:05
asal
790 orang telah melayarinya

How Can I Efficiently Select a Specific Number of Rows in SQL Server, Even Beyond the sys.all_columns Limit?

Memilih Bilangan Baris Tertentu dalam Pelayan SQL

Dalam Pelayan SQL, memilih bilangan baris tertentu boleh dicapai menggunakan fungsi ROW_NUMBER(). Walau bagaimanapun, terdapat pengehadan kepada bilangan baris yang boleh dikembalikan.

Penghadan Sys.Columns

Pertanyaan awal yang diberikan tidak menyatakan jadual tertentu untuk memilih baris. Apabila melaksanakan pertanyaan ini terhadap sys.all_columns, ia hanya akan mengembalikan sehingga 7374 baris kerana itu ialah jumlah bilangan baris dalam jadual itu.

Pendekatan Ganti

Untuk memilih bilangan baris yang lebih besar , kaedah alternatif boleh digunakan:

Menggunakan Nombor Jadual:

DECLARE @start INT = 1;
DECLARE @end INT = 10;

WITH numbers AS (
    SELECT @start AS number
    UNION ALL
    SELECT number + 1 
    FROM  numbers
    WHERE number < @end
)
SELECT *
FROM numbers
OPTION (MAXRECURSION 0);
Salin selepas log masuk

Dengan menggunakan Jadual Nombor, bilangan baris yang tidak terhingga boleh dijana. Walau bagaimanapun, pendekatan ini boleh menjadi agak perlahan.

CTE Cascaded untuk Jadual Tally

Untuk prestasi yang lebih baik, CTE cascaded boleh digunakan untuk mencipta Jadual Tally:

DECLARE @Range AS INT = 7374

;WITH E1(N) AS( -- 10 ^ 1 = 10 rows
    SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows
E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows
CteTally(N) AS(
    SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    FROM E8
)
SELECT * FROM CteTally
Salin selepas log masuk

Pendekatan ini mampu menjana sejumlah besar baris dengan bacaan sifar. Untuk lebih banyak perbandingan prestasi dan butiran tambahan tentang Jadual Tally, rujuk pautan yang disediakan dalam jawapan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Bilangan Baris Tertentu dalam Pelayan SQL dengan Cekap, Walaupun Melampaui Had sys.all_columns?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan