Tôi biết thêm về mssql đó là mysql, nhưng tôi không nghĩ rằng số lượng tham gia hoặc số hàng bạn đang nói đến sẽ gây ra cho bạn quá nhiều vấn đề với các chỉ mục chính xác tại chỗ. Bạn đã phân tích kế hoạch truy vấn để xem bạn có bị thiếu cái nào không?
http://dev.mysql.com/doc/refman/5.0 /en/explain.html
Điều đó đang được nói, một khi bạn hài lòng với các chỉ mục của mình và đã sử dụng hết các cách khác, hủy chuẩn hóa có thể là câu trả lời phù hợp. Nếu bạn chỉ có một hoặc hai truy vấn gặp sự cố, thì cách tiếp cận thủ công có thể phù hợp, trong khi một số loại công cụ lưu trữ dữ liệu có thể tốt hơn để tạo nền tảng phát triển các khối dữ liệu.
Đây là một trang web mà tôi tìm thấy có liên quan đến chủ đề:
http://www.meansandends.com / mysql-data-kho /? link_body% 2Fbody =% 7Bincl% 3AAggregation% 7D
Đây là một kỹ thuật đơn giản mà bạn có thể sử dụng để đơn giản hóa các truy vấn không chuẩn hóa, nếu bạn chỉ thực hiện một vài lần một lúc (và tôi không thay thế các bảng OLTP của bạn, chỉ tạo một bảng mới cho mục đích báo cáo). Giả sử bạn có truy vấn này trong ứng dụng của mình:
select a.name, b.address from tbla a
join tblb b on b.fk_a_id = a.id where a.id=1
Bạn có thể tạo một bảng không chuẩn hóa và điền gần như cùng một truy vấn:
create table tbl_ab (a_id, a_name, b_address);
-- (types elided)
Lưu ý rằng các dấu gạch dưới khớp với bí danh bảng mà bạn sử dụng
insert tbl_ab select a.id, a.name, b.address from tbla a
join tblb b on b.fk_a_id = a.id
-- no where clause because you want everything
Sau đó, để sửa ứng dụng của bạn để sử dụng bảng không chuẩn hóa mới, hãy chuyển dấu chấm cho dấu gạch dưới.
select a_name as name, b_address as address
from tbl_ab where a_id = 1;
Đối với các truy vấn lớn, điều này có thể tiết kiệm rất nhiều thời gian và làm rõ dữ liệu đến từ đâu và bạn có thể sử dụng lại các truy vấn bạn đã có.
Hãy nhớ rằng, tôi chỉ ủng hộ đây là phương sách cuối cùng. Tôi cá là có một vài chỉ mục sẽ giúp ích cho bạn. Và khi bạn khử chuẩn hóa, đừng quên tính toán thêm dung lượng trên đĩa của bạn và tìm ra khi nào bạn sẽ chạy truy vấn để điền các bảng mới. Điều này có thể xảy ra vào ban đêm hoặc bất cứ khi nào hoạt động ít. Và tất nhiên, dữ liệu trong bảng đó sẽ không bao giờ được cập nhật chính xác.
[Tuy nhiên, một chỉnh sửa khác] Đừng quên rằng các bảng mới bạn tạo cũng cần được lập chỉ mục! Phần tốt là bạn có thể lập chỉ mục cho nội dung trái tim của mình và không phải lo lắng về việc tranh chấp khóa cập nhật, vì ngoài việc chèn hàng loạt, bảng sẽ chỉ thấy các lựa chọn.