Ok,100k hàng trả lại theo một thứ tự ngẫu nhiên, mà không có một thời gian SQL ra xin vui lòng
Tôi đã làm rất nhiều đọc trên trả về một hàng ngẫu nhiên thiết lập vào năm ngoái, và là giải pháp chúng tôi đưa ra là
ORDER BY newid()
Điều này là tốt cho < 5k hàng. Nhưng khi chúng ta đang nhận được> 10-20k hàng chúng ta đang nhận được thời gian chờ SQL, Kế hoạch thực hiện cho tôi biết rằng 76% chi phí truy vấn của tôi đến từ dòng này. và loại bỏ dòng này tăng tốc độ theo thứ tự độ lớn khi chúng ta có một lượng lớn hàng.
Người dùng của chúng tôi có yêu cầu thực hiện tối đa 100 nghìn hàng tại một thời điểm như thế này.
Để cung cấp cho bạn thêm một chút chi tiết.
Chúng tôi có một bảng có 2,6 triệu chữ số gồm 4 chữ số và chữ số. Chúng tôi sử dụng một bộ ngẫu nhiên trong số này để đạt được mục nhập vào một địa điểm. Ví dụ, nếu chúng ta có một sự kiện với dung lượng 5000, một bộ ngẫu nhiên 5000 trong số này sẽ được rút ra từ bảng sau đó được cấp cho mỗi khách hàng dưới dạng mã vạch, sau đó ứng dụng quét mã vạch ở cửa có cùng một danh sách 5000. Lý do sử dụng mã gồm 4 chữ số alpha (và không phải là số ngu ngốc dài như GUID) là mọi người dễ dàng viết số đó (hoặc nhắn tin cho bạn bè) và chỉ cần mang và nhập nó theo cách thủ công, vì vậy chúng tôi không muốn số lượng lớn ký tự. Khách hàng yêu thích bit btw cuối cùng.
Có cách nào tốt hơn so với ORDER BY newid()
hoặc bạn có cách nhanh hơn để nhận 100 nghìn hàng ngẫu nhiên từ bảng có 2,6 triệu?
Oh, và chúng tôi đang sử dụng MS SQL 2005.
Cảm ơn,
Jo
Một điều thú vị ở đây: http://www.sqlteam.com/article/returning-rows-in-random-order-part-ii-revenge-of-the-randomizer –