Tôi có một giải pháp cơ sở dữ liệu hiện có không hoạt động tốt. Tôi đang tìm kiếm dữ liệu đa chiều với cấu trúc bảng truyền thống bằng cách sử dụng float, v.v ... Cơ sở dữ liệu chứa ~ 1-2M hàng.
Sau một số tìm kiếm, tôi đã tìm thấy các loại dữ liệu không gian của SQL Server nơi bạn có thể xác định hình học dựa trên Điểm hoặc MultiPoint nơi bạn có thể tìm kiếm với khoảng cách. Tôi nghĩ rằng đây có thể là một giải pháp nhưng tôi cần sự giúp đỡ để bắt đầu đi đúng hướng.
Cấu trúc bảng hiện tại của tôi như sau khi mỗi hàng chứa 2 (cuối cùng nhiều hơn) các giá trị XYZ:
| ID | X1 | Y1 | Z1 | X2 | Y2 | Z2 |
| 1 | 1.1 | 2.2 | 5.1 | 1.2 | 2.1 | 4.1 |
| 2 | 3.2 | 5.1 | 4.1 | 3.2 | 3.1 | 3.1 |
| 3 | 4.1 | 2.3 | 6.3 | 4.2 | 4.1 | 2.1 |
| 4 | 2.4 | 3.5 | 2.1 | 3.2 | 2.1 | 4.1 |
Tôi đang thực hiện tìm kiếm với dung sai cho từng giá trị X, Y và Z.
Ví dụ:
(pseudocode)
declare targetXYZ1 = (4.1, 2.2, 3.1);
declare targetXYZ2 = (2.8, 2.2, 4.2);
declare toleranceXYZ = (2,2,2)
Select ID from MyXYZTable tb
Where
Math.Abs(tb.X1 - targetXYZ1.X1) < toleranceXYZ.X
AND Math.Abs(tb.Y1 - targetXYZ1.Y1) < toleranceXYZ.Y
AND Math.Abs(tb.Z1 - targetXYZ1.Z1) < toleranceXYZ.Z
AND Math.Abs(tb.X2 - targetXYZ1.X2) < toleranceXYZ.X
AND Math.Abs(tb.Y2 - targetXYZ1.Y2) < toleranceXYZ.Y
AND Math.Abs(tb.Z2 - targetXYZ1.Z2) < toleranceXYZ.Z
Sau một số phân tích, có lẽ tôi sẽ cần tạo một bảng có 1 hoặc 2 cột hình học cho xyz1 và xyz2 với hình học :: Point (0, 0, 0)
Những câu hỏi của tôi:
- Có một giải pháp khả thi với các loại không gian SQL Server không?
- Tôi có cần sử dụng tìm kiếm hàng xóm gần nhất không hoặc tôi có thể sử dụng STDistance
- Tôi có cần thiết lập một chỉ mục không gian cho bảng không?
Bất kỳ lời khuyên hoặc lời khuyên và thủ thuật đều rất hoan nghênh!