Tôi không nghĩ rằng có một cách dễ dàng để làm điều này, nhưng trên cơ hội ra rằng có ...Với kết quả mong muốn và thông tin cơ sở dữ liệu, programically xây dựng một truy vấn SQL cung cấp cho những kết quả
tôi đưa ra một số danh sách khoảng 10.000 hồ sơ mỗi từ một bảng kỷ lục 10 triệu. Dữ liệu hiện được tạo bởi các truy vấn trên các phần tử không được lập chỉ mục khác nhau. Tôi muốn tự động tạo các truy vấn cho kết quả tương tự, sử dụng mười trường được lập chỉ mục riêng biệt.
Có một thuật toán đã biết để xây dựng một cái gì đó như thế này không? Ngoài những điều cơ bản về việc bao gồm mỗi 'nút' được lập chỉ mục bằng OR của riêng nó, ý tôi là.
Ví dụ, giả sử dữ liệu muốn là:
Letter, Number
A, 1
A, 2
B, 1
C, 2
và cơ sở dữ liệu ban đầu có
Letter, Number
A, 1
A, 2
A, 3
B, 1
C, 1
C, 2
D, 1
D, 3
Tôi muốn một cái gì đó như:
WHERE ((Letter = 'A' OR Letter = 'B') AND (Number = 1 OR Number = 2))
OR (Letter = 'C' and Number = 2)
Hoặc có thể
WHERE (Letter IN ('A', 'B', 'C') AND Number IN (1, 2)
AND NOT (Number = 1 AND Letter = 'C'))
Nhưng tôi nghĩ Tôi thà không có
WHERE (Letter = 'A' AND Number = '1') OR
(Letter = 'A' AND Number = '2') OR
(Letter = 'B' AND Number = '1') OR
(Letter = 'C' AND Number = '2')
- trừ khi các chuyên gia cơ sở dữ liệu ở đây nghĩ rằng đó sẽ là nhiều hơn nữa được tối ưu hóa trong thời gian dài, cho cỡ mẫu chúng ta đang nói về . Thời gian chạy của các truy vấn là quan trọng; thời gian chạy của công cụ chuyển đổi là không. Tôi cũng không nhất thiết phải có câu trả lời 'tốt nhất'; 'đủ tốt' là chấp nhận được.
Kế hoạch hiện tại của tôi là đếm, sắp xếp và lặp lại thông qua tìm kiếm những thứ có thể được nhóm lại với nhau, để cố gắng tạo càng ít 'nhóm' càng tốt; Tôi nghĩ rằng tôi không muốn có mười ngàn (A và B và C và D và E và F và G và H và tôi và J) ORed với nhau.
Suy nghĩ? Lời khuyên chuyên gia?
Bất kỳ ý tưởng nào về cách gắn thẻ thẻ này cũng được đánh giá cao. Nó không thực sự là một câu hỏi SQL, cũng giống như một câu hỏi bất khả tri về ngôn ngữ diễn ra trong một không gian SQL. Tôi có lẽ nên tách riêng suy nghĩ về tối ưu hóa ở một nơi khác; Tôi quan tâm nhiều hơn đến thuật toán, ở đây. – Trevel
Tôi đã thêm thẻ 'thuật toán'. Có thể có một thuật toán cụ thể, được đặt tên hoặc đặt tên là vấn đề phù hợp với điều này, nhưng tôi không biết nó có thể là gì. –
Tất cả các truy vấn đó sẽ dẫn đến một kế hoạch truy vấn tương đương trên hầu hết các cơ sở dữ liệu. DB không thể thực hiện hiệu quả. –