Là quan hệ chậm hơn một bảng lớn, không hiệu quả?


8

Tôi đã được yêu cầu trong công việc của mình vi phạm hình thức bình thường đầu tiên (lặp lại các nhóm trên các cột, sử dụng các giá trị rỗng / null) nhiều lần, "vì sức mạnh xử lý của máy tính". Tóm lại, một bảng "sinh viên" nên có ít nhất 8 trường trống (ví dụ: điện thoại: phone1, phone2, phone3 ...) thay vì đề xuất của tôi - bảng "điện thoại" chứa số điện thoại (và có thể có siêu dữ liệu khác) và khóa ngoại là số id sinh viên. Sếp của tôi nói rằng tốt hơn hết là lưu trữ chúng theo cách đó vì "có ít chu kỳ CPU hơn và đó là vấn đề trong các nền tảng web", thay vì sử dụng các mối quan hệ. Tôi nói rằng, trong trường hợp xấu nhất, nó không đáng kể.

Trong ví dụ đó, sử dụng các mối quan hệ (giả sử rằng các bảng chứa rất nhiều bản ghi trong một ứng dụng web cỡ trung bình) chậm hơn đáng kể so với sử dụng loại lược đồ bảng đó?


Tôi tin rằng nó thực sự sẽ nhanh hơn để làm như ông chủ của bạn nói, nhưng bạn có nhiệm vụ cực kỳ khó chịu là đảm bảo bạn không nhận được sự bất thường cập nhật. Nhưng nó có thể tạo ra nhiều cpu hơn nếu bạn cần thay đổi một phần dữ liệu chung cho bảng (ala thay đổi mã vùng cho tất cả các số điện thoại ...)
Patrick

3
Tôi thực sự nghi ngờ, trên phần cứng hiện đại, với điều kiện bạn đã lập chỉ mục các khóa ngoại của mình rằng CPU bổ sung thậm chí có thể đo được, đặc biệt là ở phía bên kia của máy chủ web. Tại trang web của tôi, chúng tôi có các bảng được chuẩn hóa và phục vụ tốt ở phía bắc 50.000 lượt truy cập / giây mà không bị đổ mồ hôi. Nói với sếp của bạn để gắn bó với golf và để lại các quyết định kỹ thuật cho bạn!
Gaius

1
@Patrick Bạn có tin rằng nó nhanh hơn đáng kể hoặc chỉ nhanh hơn một chút? Và tôi nghĩ giống như @Gaius - trên phần cứng hiện đại, ngay cả khi nó "nhanh hơn", thì tốc độ và độ bền của phần cứng là không đáng kể.
AeroCross

1
Tôi nghĩ rằng sự cải thiện tốc độ là không quan trọng. Chỉ khi bạn có bộ dữ liệu lớn và đang thực hiện các phép nối vô lý, bạn mới thấy bất kỳ sự khác biệt đáng chú ý nào về hiệu suất.
Patrick

Câu trả lời:


10

Tôi không thấy bất cứ ai có thể đưa ra tuyên bố như vậy mà không có một số sự kiện thực tế để sao lưu nó. Nếu các truy vấn của bạn bị ràng buộc bởi CPU, thì bạn nên tìm cách giảm bớt nút thắt đó.

Nghe có vẻ như ông chủ của bạn cảm thấy rằng một cơ sở dữ liệu không chuẩn hóa sẽ hoạt động tốt nhất, nhưng tôi không biết đủ về ứng dụng của bạn để nói liệu điều đó có đúng hay không. Số lần xóa, cập nhật và chèn dự kiến ​​cho bảng này sẽ là bao nhiêu?

Tôi hy vọng rằng một thiết kế không chuẩn hóa như vậy có thể làm giảm thời gian CPU nhưng sẽ hy vọng rằng I / O đĩa của bạn sẽ tăng lên. Và đọc vật lý từ đĩa sẽ đắt hơn nhiều so với chu kỳ CPU, vì vậy có lẽ ông chủ của bạn có một số liệu rất cụ thể để đáp ứng (CPU) và kết quả là muốn có một thiết kế rất cụ thể? Nếu vậy, tôi chỉ đơn giản là xây dựng những gì được yêu cầu và giữ số liệu về chi phí CPU cho các truy vấn đang được chạy. Nếu bạn thấy sự gia tăng thời gian thì bạn có thể muốn đề xuất một số thay đổi thiết kế.

Trên thực tế, có lẽ nên lấy một danh sách tất cả các số liệu mà sếp của bạn muốn xem và theo dõi chúng theo thời gian.


Có một điều là anh ta học cũ - trong những năm của anh ta (20 năm?) Có lẽ điều đó quan trọng, như anh ta đề xuất, nhưng phần cứng và phần mềm ngày nay rất nhiều, mạnh mẽ, và theo thiết kế, nhanh hơn theo cách đó. Tuy nhiên, thật khó khăn để đối phó với một người như thế này, bởi vì anh ta có nhiều sức mạnh hơn và "thực tế" thực tế (nhưng lỗi thời) rằng nó nhanh hơn, và nó nên được xem xét theo cách đó.
AeroCross

1
hiểu. hãy thử để anh ấy liệt kê các số liệu (CPU, đĩa I? O) mà anh ấy muốn đo và những gì anh ấy thấy là chấp nhận được. sau đó chỉ cần đo các mục đó và khi mọi thứ trở nên tồi tệ, bạn có thể đưa ra một số lựa chọn thay thế. bằng cách đó bạn có thể có được một thiết kế tốt hơn được triển khai mà không cần phải chiến đấu; chỉ để cho thiết kế của mình chứng minh bản thân theo thời gian. thực sự đó là một chiến thắng
SQLRockstar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.