Sự thật mà nói, không những bạn sẽ không thấy mất hiệu năng nhiều khi có các ràng buộc khóa ngoại trong cơ sở dữ liệu, mà bạn sẽ thấy các cải tiến hiệu suất. Trình tối ưu hóa truy vấn SQL Server được xây dựng dựa trên khái niệm về khóa chính và khóa trước cũng như các loại ràng buộc dữ liệu khác. Nếu những điều này được đặt ra và được thực thi, trình tối ưu hóa có thể tận dụng lợi thế của chúng để giúp bạn có hiệu suất tốt hơn. Đây là một bài đăng blog với một ví dụ đơn giản cho thấy nó hoạt động.
Nếu bạn đang ở trong trường hợp cạnh mà bạn thực sự có nhiều phần chèn hơn số lần đọc (và các bản cập nhật & xóa yêu cầu đọc, vì vậy chúng thường kết thúc việc thêm vào số lần đọc), thì có thể có ý nghĩa để loại bỏ các ràng buộc khỏi dữ liệu về hiệu suất, có thể . Nhưng vì phần lớn các cơ sở dữ liệu được định hướng đọc, bạn đang hy sinh hiệu năng, không tăng cường nó.
Và không ai trong số này đề cập đến thực tế là tính toàn vẹn dữ liệu được xử lý tốt hơn tại cơ sở dữ liệu vì bạn chỉ phải tạo một lần khi bạn làm tất cả các công việc trong mã, bạn có thể phải thực hiện nhiều lần cho nhiều ứng dụng (trừ khi bạn thiết kế lớp truy cập dữ liệu của bạn một cách cẩn thận và yêu cầu mọi ứng dụng truy cập db để đi qua cùng lớp đó).
Nếu bạn đang sử dụng một hệ thống cơ sở dữ liệu quan hệ, tôi nói, tại sao không thực sự sử dụng nó. Nếu bạn không cần dữ liệu quan hệ, hãy đi với Hadoop hoặc một cái gì đó khác.