2008-10-31 25 views

Trả lời

25

nó không phải không nghe, nhưng tôi sẽ đặt nó vào một cái nhìn để dễ sử dụng và bảo trì

+1

Tôi thích cơ sở dữ liệu chuẩn hóa rất nhiều, nhưng có một thời điểm khi tôi thích "Tôi cần một lượt xem. NGAY BÂY GIỜ". và sau đó đi và làm một. –

+0

lượt xem cần phải chết cùng với các procs được lưu trữ. kích hoạt có thể ở lại mặc dù. – Shawn

+0

@Shawn: Relvars ảo ("views") tạo điều kiện độc lập dữ liệu. Có rất ít tính năng của một DBMS hữu dụng hơn thế này. – Apocalisp

17

Hai câu hỏi:

  1. Ứng dụng có hoạt động không?
  2. Bạn có thể giải thích nó không?

Nếu có, thì 7 thì tốt. Nếu bạn không thể giải thích các truy vấn, thì bảy là quá nhiều.

4

Tùy thuộc vào những gì bạn đang cố gắng hoàn thành, một số lượng lớn các kết nối trong truy vấn không đáng kể.

Cá nhân, tôi sẽ ít quan tâm đến số lượng kết nối được sử dụng để trả lại tập kết quả mong muốn và quan tâm hơn đến việc truy vấn được tối ưu hóa và chạy trong các tham số có thể chấp nhận.

Nếu truy vấn được tối ưu hóa hoàn toàn và không thể cắt bớt nhưng chính truy vấn không thực thi đủ nhanh thì có thể thiết kế cấu trúc dữ liệu không phù hợp với những gì bạn đang cố gắng thực hiện. Tại thời điểm đó bạn có thể đánh giá lại những gì bạn đang cố gắng hoàn thành hoặc cấu trúc của dữ liệu đang cung cấp mô hình kinh doanh của bạn.

2

Có thể không bình thường nhưng chắc chắn không quá lớn. Nếu bạn thấy mình tham gia cùng một bảng hơn và hơn, tạo ra một số quan điểm.

3

Nó không có gì bất thường. Với một hệ thống như Siebel, việc xem số lượng nhân vật tăng gấp đôi là rất phổ biến.

3

Bảy kết nối làm cho nó khó khăn hơn cho khả năng đọc, nhưng quan trọng hơn là hiệu suất và khả năng mở rộng. Nếu đó là OK, đi cho nó.

2

Số lượng tham gia phụ thuộc vào mô hình dữ liệu của bạn, 7 lần tham gia có thể có trong truy vấn của bạn nếu đó là những gì bạn truy vấn - tôi nhớ có các truy vấn tương tự trong ứng dụng tôi đã làm việc từ lâu. kích thước bảng, chỉ mục, tải máy chủ, cấu hình máy chủ đến tên ít) và tôi không nghĩ rằng nó có thể được tổng quát rằng 7 tham gia là xấu.

nếu nó làm việc cho bạn sau đó tôi đoán tốt của nó: D

0

Tôi nghĩ rằng những gì bạn muốn tránh là độ sâu tham gia lớn hơn 7. 7 bên tham gia ít hơn 7 tham gia sâu chắc chắn là không phải không nghe của, nhưng đôi khi mọi người nghe "7 tham gia" và nghĩ rằng không có không có 7 tham gia, không sâu.

+0

Ý của bạn là "Độ sâu"? Tôi cho rằng đó là các phép nối song song, chứ không phải nối tiếp nối tiếp. – dkretz

1

7 là tốt nếu thiết kế cơ sở dữ liệu của bạn yêu cầu nó. Tuy nhiên, nếu 7 là cần thiết để đạt được mục tiêu của bạn, tôi sẽ xem xét lại thiết kế cơ sở dữ liệu để đảm bảo mức độ tối tăm này thực sự cần thiết.

Ngoài sự tò mò, đây có phải là DB2 không? Chỉ cần một mô hình tôi đã nhận thấy :)

+0

Đóng, thông tin thực sự của nó – seFausto

1

là 7 tham gia bên trong này trên cùng một bảng, 7 kết nối bên trong trên các bảng khác nhau hoặc 7 lồng nhau kết nối bên trong?

... câu hỏi lừa! Nó thực sự không quan trọng, nếu đó là cấu trúc cơ sở dữ liệu của bạn yêu cầu, thì đúng là

báo trước: nếu nó là 7 kết nối bên trong lồng nhau trên cùng một bảng, bạn có thể có một bảng có cấu trúc kém ;-)

2

Vâng, điều đó là bình thường - nhưng, thực sự, nó không phải là một ý tưởng tuyệt vời từ góc độ hiệu suất. Kể từ khi kế hoạch truy vấn được xây dựng trên ước chi phí, có một increase in the number of errors khi bạn tăng tham gia (hoặc bất kỳ nhà điều hành khác, cho rằng vấn đề):

Các SQL Server Query Optimizer sẽ ước tính ít nhất một hàng sắp ra của một nhà điều hành tìm kiếm. Điều này được thực hiện để tránh trường hợp khi một cây con rất đắt tiền được chọn do đánh giá thấp thẻ. Nếu cây con được ước tính trả lại hàng bằng không, nhiều kế hoạch có giá giống nhau và có thể có lỗi trong kết quả lựa chọn gói. Vì vậy, bạn sẽ nhận thấy rằng ước tính là "cao" đối với trường hợp này và một số lỗi có thể xảy ra. Bạn cũng có thể nhận thấy rằng chúng tôi ước tính 20 lần thực thi nhánh này thay vì thực tế 10. Tuy nhiên, với số lượng các phép nối đã được đánh giá trước toán tử này, bị giảm bởi hệ số 2 (10 hàng) không được coi là quá tệ. (Lỗi có thể tăng theo cấp số nhân với số lượng tham gia).

Ngoài ra, trình tối ưu hóa cố gắng cân bằng thời gian cần thiết để lên kế hoạch so với mức tiết kiệm tiềm năng - nó sẽ không dành cả ngày cố gắng tìm kế hoạch tối ưu nhất. Việc tham gia càng nhiều, số lượng các kế hoạch thay thế càng lớn - một số trong đó có thể tối ưu hơn so với trình tối ưu hóa có thời gian để tìm.

0

Chắc chắn không phải bất thường. Tuy nhiên ít nhất trong Oracle, 7 là một số đặc biệt, như bất kỳ nhiều hơn thế và tối ưu hóa không còn có thể kiểm tra mọi thứ tự tham gia (do tăng trưởng giai thừa trong số khả năng). Vì vậy, nó sẽ là khôn ngoan để tránh đi qua 7 trừ khi bạn đang chuẩn bị để babysit kế hoạch thực hiện của bạn.

2

7 hoặc thậm chí nhiều hơn là không có gì bất thường trong kho dữ liệu trong đó bảng thực tế có thể dễ dàng có khóa ngoài tới hàng tá kích thước. Trong kịch bản kho dữ liệu, cardinality của các kích thước thường thấp so với bảng thực tế, do đó, các bộ lọc trên các tham số giúp bảng thực tế được sử dụng thông qua tìm kiếm hoặc quét chỉ mục. Đối với một lược đồ giao dịch chuẩn hóa, thường không phải là vấn đề nếu bản số của tập kết quả thấp trong bảng cơ sở chính (tức là chọn mọi thứ về một khách hàng), vì các khóa ngoại thường có thể dẫn đến chỉ mục tìm kiếm hoặc quét chỉ mục.

Các vấn đề liên quan