Tôi có một bảng có ba cột: HashUID1, HashUID2, Địa chỉ_Name (là một địa chỉ email văn bản và hai cột băm trước đó là một số sáng tạo điên rồ để liên kết các bảng người tham gia sự kiện với địa chỉ email. kiểm soát của tôi. Tập trung vào chỉ mục address_name)
Nó có 78 triệu hàng. Không được sắp xếp đúng. Bất kể, chỉ số này được chia thành rất nhiều LUN nhanh và thực hiện tìm kiếm chỉ số nhanh THỰC SỰ.
Tôi cần tạo một loạt các truy vấn để chỉ trích xuất 20.000 "hàng trên mỗi trang", nhưng tránh xung đột hoặc lừa đảo. Vì không có cột nhận dạng, hoặc cột dễ dàng đặt hàng, có cách nào dễ dàng để chọn tất cả và trang thông qua nó không?
Tôi có đúng không khi nói rằng nếu tôi thực hiện một lựa chọn * từ hugetablewithemails vào một bảng tạm thời, thì hãy chọn qua nó bởi row_number rằng bảng vẫn còn trong bộ nhớ trong suốt thời gian giao dịch, mà theo tôi, là một lượng tài nguyên bộ nhớ quá mức ? Đây có vẻ là phương pháp phân trang ưa thích. Tôi muốn trang theo tỷ lệ phần trăm thống kê. :
Có một chỉ mục duy trì địa chỉ email address_name theo thứ tự và được duy trì tốt. Trong tuần qua tôi đã có ý định giúp đỡ nhà phát triển khác này bằng cách dành một chút thời gian để xem xét việc xây dựng một Proc phát ra các phạm vi dựa trên các chức năng cửa sổ dựa trên số liệu thống kê (mà tôi không giỏi lắm, nhưng truy vấn này thực sự khiến tôi quan tâm) cung cấp một phạm vi các ký tự từ 1 đến (biến) TRÁI các ký tự của chỉ mục, đáp ứng 20.000 hàng - Nhưng tôi chưa có thời gian để bắt đầu truy vấn ...
Câu hỏi cặp đôi:
Bất kỳ đề xuất? Không tìm kiếm mã thực tế, chỉ cần một số gợi ý hoặc gợi ý dựa trên kinh nghiệm, có thể hãy cẩn thận. Tôi muốn tránh quét chỉ mục bổ sung sau lần quét đầu tiên.
Đây có phải là cách tiếp cận đúng?
Tôi đang nghĩ đến việc phá vỡ tổng chỉ số của tất cả các địa chỉ email, thu thập số lượng hàng (*), / 20.000 và sử dụng chức năng cửa sổ này để nhóm các giá trị chuỗi con tối thiểu / tối đa (1,5) dựa trên tỷ lệ phần trăm của tổng số hàng để xây dựng phạm vi nhóm. Suy nghĩ?
Đây là một quy trình ETL không thể sửa đổi cơ sở dữ liệu nguồn.
Tôi hy vọng với một lần quét chỉ mục đầy đủ tôi có thể thực hiện:
Truy vấn để có được một biểu đồ dựa trên việc sử dụng chỉ mục (được sắp xếp theo thứ tự abc) và tách nó ra (cửa sổ) bằng cách sử dụng min / max để tạo một số phạm vi như thế này, để dễ dàng tìm kiếm chỉ mục cần thiết:
A-> AAAX, (ví dụ 20k hàng) AAA-Z, B-> (20k khác), B-> BAAR -> BAAR-> CDEFG -> CDEFH> FAAH, v.v.
Chúng tôi chạy đọc cam kết trong các cơ sở dữ liệu cho quá trình ETL này. Chúng tôi chỉ cố gắng đưa ra hàng loạt số điểm 20 nghìn vì DBA nói rằng chúng tôi đang sử dụng quá nhiều tài nguyên mạng bằng cách lấy các bảng đầy đủ. Nếu dữ liệu đã thay đổi (đó là một mối quan tâm), chúng tôi sẽ cập nhật bảng DW và bảng phân tầng của mình một cách nhanh chóng.
Tôi rất thích sử dụng các bảng tạm thời, nhưng nếu tôi đã làm như vậy, tôi đã tràn vào tempdb và nhận được thông báo qua e-mail từ các DBA liên quan đến nó và cơ sở dữ liệu quá lớn.