Gần đây tôi đã nghe nói rất nhiều về SQL là một ngôn ngữ khủng khiếp, và có vẻ như mọi khuôn khổ dưới ánh mặt trời đều được đóng gói sẵn với một lớp trừu tượng cơ sở dữ liệu.
Lưu ý rằng các lớp này chỉ chuyển đổi nội dung của riêng chúng thành SQL
. Đối với hầu hết các nhà cung cấp cơ sở dữ liệu SQL
là cách duy nhất để giao tiếp với động cơ.
Theo kinh nghiệm của tôi, SQL thường là cách dễ dàng hơn, linh hoạt hơn và thân thiện hơn với lập trình viên để quản lý đầu vào và đầu ra dữ liệu. Mọi lớp trừu tượng mà tôi đã sử dụng dường như là một cách tiếp cận hạn chế rõ rệt mà không có lợi ích thực sự.
… Lý do mà tôi vừa mô tả ở trên.
Các lớp cơ sở dữ liệu không thêm bất cứ thứ gì, chúng chỉ giới hạn bạn. Chúng làm cho các truy vấn trở nên đơn giản hơn nhưng không bao giờ hiệu quả hơn.
Theo định nghĩa, không có gì trong các lớp cơ sở dữ liệu mà không có trong đó SQL
.
Điều gì làm cho nó trở SQL
nên khủng khiếp và tại sao các lớp trừu tượng cơ sở dữ liệu lại có giá trị?
SQL
là một ngôn ngữ hay, tuy nhiên, để làm việc với nó cần phải có một số thao tác não bộ.
Về lý thuyết, SQL
là khai báo, tức là bạn khai báo những gì bạn muốn nhận được và động cơ cung cấp nó theo cách nhanh nhất có thể.
Trong thực tế, có nhiều cách để hình thành một truy vấn đúng (đó là truy vấn trả về kết quả chính xác).
Các nhà tối ưu hóa có thể xây dựng một lâu đài Lego từ một số thuật toán được xác định trước (vâng, chúng là nhiều), nhưng họ không thể tạo ra các thuật toán mới. Nó vẫn cần một SQL
nhà phát triển để hỗ trợ họ.
Tuy nhiên, một số người mong đợi trình tối ưu hóa tạo ra "kế hoạch tốt nhất có thể", không phải "kế hoạch tốt nhất có sẵn cho truy vấn này với việc triển khai SQL
công cụ nhất định".
Và như chúng ta đều biết, khi chương trình máy tính không đáp ứng được mong đợi của mọi người, thì đó là chương trình bị đổ lỗi chứ không phải mong đợi.
Tuy nhiên, trong hầu hết các trường hợp, việc định dạng lại một truy vấn có thể tạo ra một kế hoạch tốt nhất có thể. Tuy nhiên, có những nhiệm vụ khi nó không thể thực hiện được, với những cải tiến mới và ngày càng tăng cho SQL
những trường hợp này, số lượng ngày càng ít đi.
Tuy nhiên, sẽ rất tuyệt nếu các nhà cung cấp cung cấp một số quyền truy cập cấp thấp vào các chức năng như "lấy phạm vi chỉ mục", "lấy một hàng theo rowid
" v.v., chẳng hạn như các C
trình biên dịch cho phép bạn nhúng hợp ngữ ngay vào ngôn ngữ.
Gần đây tôi đã viết một bài báo về điều này trên blog của tôi: