Tôi đang nhập dữ liệu thị trường chứng khoán Braxin vào cơ sở dữ liệu SQL Server. Ngay bây giờ tôi có một bảng với thông tin về giá từ ba loại tài sản: cổ phiếu, lựa chọn và tiền đạo. Tôi vẫn còn trong năm 2006 dữ liệu và bảng có hơn nửa triệu hồ sơ. Tôi có thêm 12 năm dữ liệu để nhập vì vậy bảng sẽ vượt quá một triệu bản ghi chắc chắn.Cách tiếp cận của bạn để tối ưu hóa các bảng lớn (+ 1M hàng) trên SQL Server là gì?
Bây giờ, cách tiếp cận đầu tiên của tôi để tối ưu hóa là để giữ cho dữ liệu đến một kích thước tối thiểu, vì vậy tôi giảm kích thước hàng với mức trung bình của 60 byte, với các cột sau:
[Stock] [int] NOT NULL [Date] [smalldatetime] NOT NULL [Open] [smallmoney] NOT NULL [High] [smallmoney] NOT NULL [Low] [smallmoney] NOT NULL [Close] [smallmoney] NOT NULL [Trades] [int] NOT NULL [Quantity] [bigint] NOT NULL [Volume] [money] NOT NULL
Bây giờ, cách tiếp cận thứ hai để tối ưu hóa là tạo chỉ mục nhóm. Trên thực tế, chỉ mục chính được tự động nén và tôi đã biến nó thành một chỉ mục phức hợp với các trường Cổ phiếu và Ngày tháng. Điều này là duy nhất, tôi không thể có hai dữ liệu trích dẫn cho cùng một cổ phiếu trong cùng một ngày.
Chỉ số rỉ sét đảm bảo rằng các dấu ngoặc kép từ cùng một cổ phiếu ở lại với nhau và có thể được sắp xếp theo ngày. Thông tin thứ hai này có đúng không?
Ngay bây giờ với một nửa triệu bản nó lấy khoảng 200ms để chọn trích dẫn từ một tài sản cụ thể. Tôi tin rằng con số này sẽ cao hơn khi bảng phát triển.
Bây giờ với cách tiếp cận thứ ba, tôi nghĩ có thể chia bảng thành ba bảng, mỗi bảng cho một thị trường cụ thể (cổ phiếu, tùy chọn và tiền đạo). Điều này có thể sẽ giảm kích thước bảng xuống 1/3. Bây giờ, cách tiếp cận này sẽ giúp hoặc nó không quan trọng quá nhiều? Ngay bây giờ bảng có kích cỡ 50MB để nó có thể vừa với RAM hoàn toàn mà không gặp nhiều rắc rối.
Một cách tiếp cận khác sẽ sử dụng tính năng phân vùng của SQL Server. Tôi không biết nhiều về nó nhưng tôi nghĩ rằng nó thường được sử dụng khi các bảng lớn và bạn có thể trải rộng trên nhiều đĩa để giảm độ trễ I/O, tôi có đúng không? Việc phân vùng có hữu ích trong trường hợp này không? Tôi tin rằng tôi có thể phân vùng các giá trị mới nhất (năm mới nhất) và giá trị cũ nhất trong các bảng khác nhau, xác suất tìm kiếm dữ liệu mới nhất cao hơn và với phân vùng nhỏ, có thể sẽ nhanh hơn, đúng không?
Cách tiếp cận tốt khác để làm điều này nhanh nhất có thể là gì? Việc sử dụng chủ yếu của bảng sẽ là để tìm kiếm một phạm vi cụ thể của các bản ghi từ một tài sản cụ thể, như 3 tháng mới nhất của tài sản X. Sẽ có một tập quán khác nhưng điều này sẽ là phổ biến nhất, có thể được thực hiện bởi hơn 3k người dùng đồng thời.
Một số câu lệnh SELECT và/hoặc kế hoạch truy vấn sẽ giúp .... –