Cơ sở dữ liệu thực sự làm gì để tìm ra điều gì phù hợp với câu lệnh select?
Nói trắng ra, đó là một vấn đề vũ phu. Đơn giản, nó đọc qua từng bản ghi ứng viên trong cơ sở dữ liệu và khớp biểu thức với các trường. Vì vậy, nếu bạn có "select * from table where name = 'fred'", nghĩa là nó chạy qua từng bản ghi, lấy trường "name" và so sánh nó với 'fred'.
Bây giờ, nếu trường "table.name" được lập chỉ mục, thì cơ sở dữ liệu sẽ (có thể, nhưng không nhất thiết) sử dụng chỉ mục trước để xác định vị trí các bản ghi ứng viên để áp dụng bộ lọc thực tế.
Điều này làm giảm số lượng bản ghi ứng viên để áp dụng biểu thức, nếu không nó sẽ chỉ thực hiện những gì chúng ta gọi là "quét bảng", tức là đọc mọi hàng.
Nhưng về cơ bản, tuy nhiên, nó định vị các bản ghi ứng viên tách biệt với cách nó áp dụng biểu thức bộ lọc thực tế và rõ ràng là có một số tối ưu hóa thông minh có thể được thực hiện.
Làm cách nào để cơ sở dữ liệu diễn giải một phép nối khác với một truy vấn có một số câu lệnh "where key1 = key2"?
Vâng, một phép nối được sử dụng để tạo một "bảng giả" mới, trên đó bộ lọc được áp dụng. Vì vậy, bạn có tiêu chí bộ lọc và tiêu chí tham gia. Tiêu chí kết hợp được sử dụng để xây dựng "bảng giả" này và sau đó bộ lọc được áp dụng cho điều đó. Bây giờ, khi diễn giải phép nối, một lần nữa vấn đề tương tự như so sánh bộ lọc - brute force và đọc chỉ mục để xây dựng tập hợp con cho "bảng giả".
Làm thế nào để cơ sở dữ liệu lưu trữ tất cả bộ nhớ của nó?
Một trong những chìa khóa của cơ sở dữ liệu tốt là cách nó quản lý bộ đệm I / O của nó. Nhưng về cơ bản nó khớp khối RAM với khối đĩa. Với các trình quản lý bộ nhớ ảo hiện đại, một cơ sở dữ liệu đơn giản hơn gần như có thể dựa vào VM làm trình quản lý bộ đệm bộ nhớ của nó. DB'S cao cấp tự làm tất cả những điều này.
Các chỉ mục được lưu trữ như thế nào?
B + Cây thường, bạn nên tra cứu nó. Đó là một kỹ thuật thẳng tiến đã tồn tại trong nhiều năm. Lợi ích của nó được chia sẻ với hầu hết mọi cây cân bằng: quyền truy cập nhất quán vào các nút, cộng với tất cả các nút lá đều được liên kết để bạn có thể dễ dàng di chuyển từ nút này sang nút khác theo thứ tự khóa. Vì vậy, với một chỉ mục, các hàng có thể được coi là "được sắp xếp" cho các trường cụ thể trong cơ sở dữ liệu và cơ sở dữ liệu có thể tận dụng thông tin đó để có lợi cho việc tối ưu hóa. Điều này khác với việc sử dụng bảng băm cho một chỉ mục, điều này chỉ cho phép bạn truy cập một bản ghi cụ thể một cách nhanh chóng. Trong B-Tree, bạn có thể nhanh chóng không chỉ đến một bản ghi cụ thể mà còn đến một điểm trong danh sách được sắp xếp.
Cơ chế thực tế của việc lưu trữ và lập chỉ mục các hàng trong cơ sở dữ liệu thực sự khá dễ hiểu và dễ hiểu. Trò chơi đang quản lý bộ đệm và chuyển đổi SQL sang các đường dẫn truy vấn hiệu quả để tận dụng các thành ngữ lưu trữ cơ bản này.
Sau đó, có toàn bộ sự phức tạp của nhiều người dùng, khóa, ghi nhật ký và giao dịch nằm trên thành ngữ lưu trữ.