2010-02-02 27 views
8

Tôi có một bảng dữ liệu được cập nhật mỗi tuần một lần. Sau đó, tôi có truy vấn xử lý dữ liệu này và về cơ bản trả về danh sách mã và số giờ được đặt cho các mã đó. Truy vấn này phức tạp và mất khoảng 5 giây để chạy.SQL View hoặc Bảng

Dữ liệu này cần được sử dụng bởi nhiều truy vấn khác trong DB, vì vậy tôi muốn đặt nó ở đâu đó để có thể truy cập dễ dàng bằng truy vấn khác. Việc này có vẻ như là một ý tưởng tốt, nhưng điều đó có nghĩa là mỗi lần xem này được gọi là nó sẽ chạy lại truy vấn này, mất 5 giây, nếu có nhiều cuộc gọi đến một lần thì nó sẽ gây ra ứng dụng để làm chậm. Vì vậy, tôi đã nghĩ, sẽ tốt hơn nếu bạn tạo chế độ xem này làm bảng khi dữ liệu được nhập vào Thứ Hai, vì đó sẽ là lần duy nhất thay đổi này. Đây có phải là ý tưởng hay nhất, hay tôi đang nhìn điều này theo cách sai?

+0

NẾU bạn đặt điều này trong bảng spearate, đừng quên lập chỉ mục nó trên các tệp mà các truy vấn sử dụng nó sẽ được sử dụng. – HLGEM

Trả lời

2

Tôi xử lý các vấn đề tương tự với hầu hết các dự án của tôi.

Chúng tôi có nhiều dữ liệu cần được tổ chức lại cho các mục đích khác nhau. Chúng tôi cũng được hưởng lợi từ văn hóa doanh nghiệp được sử dụng cho công việc hàng loạt và quy trình qua đêm, vì vậy người dùng được đào tạo tốt về bản chất dữ liệu được chụp nhanh. Điều đầu tiên mà hầu hết người dùng là xuất dữ liệu sang Excel, vì vậy đó không phải là vấn đề.

Sử dụng các bảng bổ sung là một cách hợp lý để truy cập tại đây.

Cá nhân, tôi tiền tố các bảng này với dấu gạch dưới.

_LargeUsefulData 

Điều này cho phép tôi dễ dàng xác định các bảng tiện lợi từ các thực thể đóng vai trò tích cực trong hoạt động bình thường của hệ thống.

2

Âm thanh như một cách hợp lý để thực hiện.

Khi truy vấn tốn kém, đặt kết quả vào bảng "báo cáo" được sử dụng bởi các âm thanh ứng dụng khác như một sự thỏa hiệp tốt.

Miễn là người dùng của dữ liệu này hài lòng với việc thay đổi khi bạn mô tả, cách tiếp cận của bạn là tốt.

0

Bạn vẫn đang "xem" các hàng của mình cho dù hàng trong bảng hay trong chế độ xem của các hàng trong bảng.

Trước tiên, tôi sẽ cố gắng tối ưu hóa truy vấn của bạn (nhấn chỉ mục của bạn, có thể thêm/cập nhật/thay đổi chỉ mục của bạn) và chạy nó thông qua một trình thu thập thông tin. Profilers cung cấp cái nhìn sâu sắc tuyệt vời ... vào kế hoạch quyết định của cơ sở dữ liệu của bạn.

1

Nếu cấu trúc khung nhìn của bạn cho phép lập chỉ mục, bạn có thể tạo chế độ xem được lập chỉ mục (thực ra chỉ là bản sao dữ liệu được cập nhật bất cứ khi nào các bảng cơ bản được cập nhật).

Tuy nhiên, không phải mọi truy vấn đều cho phép lập chỉ mục chế độ xem trên đó.

Nếu dữ liệu của bạn không phải là thực tế thứ hai đến thứ hai, thì việc tạo bảng là OK.

0

Có, đó là bước đầu tiên theo hướng của Kho dữ liệu :) Tất nhiên bạn nên đảm bảo rằng bảng mới luôn được xây dựng sau mỗi lần cập nhật hàng tuần.

3

Một đồng nghiệp đã chỉ cho tôi "Chế độ xem được materialized".

http://www.pgcon.org/2008/schedule/attachments/64_BSDCan2008-MaterializedViews-paper.pdf

Về cơ bản bạn sao chép dữ liệu từ một cái nhìn vào một bảng và sử dụng bảng này như một cái nhìn. Điểm trong bản trình bày (link) đó là bạn có thể làm việc với các trigger và các hàm để chỉ cập nhật một số phần của bảng đó.

Rất hữu ích, tôi đã triển khai chế độ xem hiện thực hóa như vậy trong SQL Server.

0

Tôi đã phải đối mặt với các loại vấn đề tương tự trong hỗ trợ sản xuất của mình, nơi tôi cần xử lý một kho dữ liệu lớn. Về cơ bản, những gì tôi đã làm là, tôi tạo ra các bảng bằng cách sử dụng một kịch bản lệnh shell. Tập lệnh shell chạy theo cách này:

  1. Nếu bảng tạm thời tồn tại, hãy thả .
  2. Chạy truy vấn bằng cách tạo ra một bảng thích tạo bảng x là (chọn ....)
  3. Sử dụng bảng tạm thời và tạo như bảng tạm thời/vượt trội.
  4. Thả bảng tạm thời nếu bạn không cần thêm hoặc giữ lại nếu bạn không nghĩ rằng nó sẽ ăn đĩa của bạn không gian.

Tất cả điều này có thể được thực hiện bằng cách sử dụng tập lệnh shell đơn giản. Tôi thấy nó rất hữu ích và thậm chí bây giờ nó đang hoạt động hiệu quả.