Bất kỳ câu trả lời mà tham gia một bảng trên đó tự sẽ tạo ra một luật vuông ...
- a JOIN b ON a.class = b.class AND a.age >= b.age
- on average the >= condition will be true for half the class
- 6 people in a class
->6*6/2 = 18
- 10 people in a class
->10*10/2 = 50
-> very rapid growth
Như các kích thước bảng phát triển các hoạt động sẽ làm suy giảm nhanh chóng. Nếu bạn đang giữ mọi thứ nhỏ và chúng sẽ không phát triển nhiều, đó có phải là vấn đề không? Cuộc gọi của bạn có ...
Một thay thế liên quan đến mã nhiều hơn, nhưng tăng tuyến tính ...
- Đầu tiên, chèn tất cả các hồ sơ intoa bảng mới, với một lĩnh vực SẮC, sắp xếp theo lớp sau đó Tuổi
- Bây giờ, đối với mỗi lớp, tìm MIN (id)
- Bây giờ, đối với mỗi lớp, rinf kỷ lục ở đâu = MIN (id) + 8 (đối với cả 9)
có rất nhiều cách thực hiện 2 bước cuối cùng. Cá nhân tôi sẽ sử dụng ...
SELECT
[USER_WITH_IDS].id,
[USER_WITH_IDS].class,
[USER_WITH_IDS].age
FROM
[USER_WITH_IDS]
WHERE
[USER_WITH_IDS].id = (
SELECT
MIN([min].ID) + 8
FROM
[USER_WITH_IDS] AS [min]
WHERE
[min].class = [USER_WITH_IDS].class
)
Điều này mang lại cho ...
- Một đường chuyền để tạo ra các ID mới
- Một đường chuyền để có được MIN (id) cho mỗi lớp
Một đường chuyền để có được những hồ sơ bạn cần
Và tùy thuộc vào cách tốt người tối ưu hóa là, bằng cách sử dụng một chỉ số (lớp sau đó id) sẽ cho phép nó kết hợp 2 lượt cuối cùng thành 1 vượt qua.
2 hoặc 3 lần, cho dù kích thước của bảng hoặc lớp lớn như thế nào. Tuyến tính, không vuông luật ...
Phương pháp trong liên kết CO làm việc nhưng nó là một chút một hack. Nó cũng rất nhanh. Đối với một số tiền phạt, cho sản xuất không! –