Nếu id
là một chỉ số, sau đó tôi đang nghĩ đến việc gì đó dọc theo những dòng:
with ids as (
select 1 as id
union all
select id + 125000
from ids
where id <= 100000000
)
select ids.id,
(select name from table t where t.id = ids.id) as name
from ids
option (MAXRECURSION 1000);
Tôi nghĩ rằng việc xây dựng này sẽ sử dụng các chỉ số trên bàn.
EDIT:
Như tôi đã suy nghĩ về phương pháp này, bạn thực sự có thể sử dụng nó để có được id ngẫu nhiên thực tế trong bảng, chứ không phải là những người chỉ cách đều nhau:
with ids as (
select 1 as cnt,
ABS(CONVERT(BIGINT,CONVERT(BINARY(8), NEWID()))) % 100000000 as id
union all
select cnt + 1, ABS(CONVERT(BIGINT,CONVERT(BINARY(8), NEWID()))) % 100000000
from ids
where cnt < 800
)
select ids.id,
(select name from table t where t.id = ids.id) as name
from ids
option (MAXRECURSION 1000);
Mã cho thực tế trình tạo số ngẫu nhiên đến từ here.
EDIT:
Do quirks trong SQL Server, bạn vẫn có thể nhận được id không tiếp giáp, ngay cả trong kịch bản của bạn. Điều này được chấp nhận answer giải thích nguyên nhân. Tóm lại, các giá trị nhận dạng không được phân bổ một lần, mà là theo nhóm. Máy chủ có thể bị lỗi và thậm chí các giá trị không sử dụng bị bỏ qua.
Một lý do tôi muốn thực hiện lấy mẫu ngẫu nhiên là giúp tránh vấn đề này. Có lẽ, tình hình trên khá hiếm trên hầu hết các hệ thống. Bạn có thể sử dụng lấy mẫu ngẫu nhiên để tạo ra 900 id. Từ đó, bạn sẽ có thể tìm thấy 800 thực tế có sẵn cho mẫu của bạn.
Nguồn
2013-09-03 20:02:00
mục đích của việc này là gì? Bạn đang cố gắng để có được một tập hợp con ngẫu nhiên của kết quả? –