Tôi đã nghĩ rằng cơ sở dữ liệu sẽ biết đủ về những gì họ gặp phải thường xuyên và có thể đáp ứng các yêu cầu mà họ đặt ra để họ có thể quyết định thêm chỉ mục vào dữ liệu được yêu cầu cao.
UNIQUE
ràng buộc.
Tôi đã nghĩ rằng cơ sở dữ liệu sẽ biết đủ về những gì họ gặp phải thường xuyên và có thể đáp ứng các yêu cầu mà họ đặt ra để họ có thể quyết định thêm chỉ mục vào dữ liệu được yêu cầu cao.
UNIQUE
ràng buộc.
Câu trả lời:
Cập nhật
Điều này hiện được thực hiện trong SQL Server Azure. Nó tạo ra các khuyến nghị
và quản lý chỉ mục có thể được cấu hình để được tự động .
Cho phép quản lý chỉ mục tự động
Bạn có thể đặt Trình tư vấn cơ sở dữ liệu SQL để tự động thực hiện các đề xuất. Khi có khuyến nghị, chúng sẽ tự động được áp dụng. Như với tất cả các hoạt động chỉ mục được quản lý bởi dịch vụ nếu tác động hiệu suất là tiêu cực, khuyến nghị sẽ được hoàn nguyên.
Câu trả lời gốc
Một số cơ sở dữ liệu đã tự động (loại) tạo chỉ mục.
Trong SQL Server, kế hoạch thực hiện đôi khi có thể bao gồm một toán tử Spool Index trong đó RDBMS tự động tạo một bản sao được lập chỉ mục của dữ liệu. Tuy nhiên, bộ đệm này không phải là một phần cơ sở dữ liệu liên tục được giữ đồng bộ với dữ liệu nguồn và nó không thể được chia sẻ giữa các lần thực hiện truy vấn, có nghĩa là việc thực hiện các kế hoạch đó có thể kết thúc việc tạo và bỏ chỉ mục tạm thời trên cùng một dữ liệu.
Có lẽ trong các RDBMS trong tương lai sẽ có khả năng tự động giảm và tạo các chỉ mục liên tục theo khối lượng công việc.
Quá trình tối ưu hóa chỉ số cuối cùng chỉ là một phân tích lợi ích chi phí. Mặc dù đúng là con người có thể có nhiều thông tin hơn về tầm quan trọng tương đối của các truy vấn trong khối lượng công việc về nguyên tắc, không có lý do nào khiến thông tin này không thể được cung cấp cho trình tối ưu hóa. SQL Server đã có một bộ điều chỉnh tài nguyên cho phép các phiên được phân loại thành các nhóm khối lượng công việc khác nhau với các phân bổ tài nguyên khác nhau theo mức độ ưu tiên.
Các DMV chỉ mục bị thiếu được đề cập bởi Kenneth không nhằm mục đích được triển khai một cách mù quáng vì họ chỉ xem xét các lợi ích cho một truy vấn cụ thể và không cố gắng tính chi phí của chỉ mục tiềm năng cho các truy vấn khác. Nó cũng không củng cố các chỉ số thiếu tương tự. ví dụ: đầu ra của DMV này có thể báo cáo các chỉ mục bị thiếu trên A,B,C
vàA,B INCLUDE(C)
Một số vấn đề hiện tại với ý tưởng là
Có lẽ hợp lý khi hy vọng tính chính xác của các mô hình chi phí sẽ được cải thiện theo thời gian nhưng điểm 2 có vẻ khó giải quyết hơn và điểm 3 vốn không hòa tan.
Tuy nhiên, có lẽ phần lớn các cài đặt không nằm trong tình huống lý tưởng hóa này với đội ngũ nhân viên lành nghề liên tục theo dõi, chẩn đoán và dự đoán (hoặc ít nhất là phản ứng với) những thay đổi trong khối lượng công việc.
Các dự án AutoAdmin tại Microsoft Research đã được chạy từ năm 1996
Mục tiêu của dự án này là làm cho cơ sở dữ liệu tự điều chỉnh và tự quản trị bằng cách khai thác kiến thức về khối lượng công việc
Trang chủ của dự án liệt kê một số dự án hấp dẫn. Một là đặc biệt có liên quan đến câu hỏi ở đây
Một vấn đề thú vị khác phát sinh khi không có sẵn DBA (ví dụ: cơ sở dữ liệu nhúng hoặc một doanh nghiệp nhỏ). Trong các kịch bản như vậy, một cách tiếp cận điều chỉnh chỉ số liên tục chạm thấp có thể trở nên quan trọng. Chúng tôi đã khám phá các giải pháp ... [in] Cách tiếp cận trực tuyến để điều chỉnh thiết kế vật lý trong tập tin ICDE 2007.
Các tác giả nhà nước
Với các tính năng DBMS ngày càng phổ biến như các chỉ mục trực tuyến, sẽ rất hấp dẫn khi khám phá các giải pháp tự động hơn cho vấn đề thiết kế vật lý giúp cải tiến công nghệ hiện đại.
Bài viết giới thiệu một thuật toán
Các đặc điểm chính của nó là:
- Khi các truy vấn được tối ưu hóa, chúng tôi xác định một bộ chỉ mục ứng viên có liên quan sẽ cải thiện hiệu suất. Tính năng này cho phép xử lý truy vấn tiếp tục song song với các chỉ mục được xây dựng trong nền.
- Tại thời điểm thực hiện, chúng tôi theo dõi các lợi ích tiềm năng mà chúng tôi mất bằng cách không có các chỉ mục ứng cử viên đó và cả tiện ích của các chỉ mục hiện có khi có các truy vấn, cập nhật và các ràng buộc về không gian.
- Sau khi chúng tôi thu thập đủ bằng chứng của người Viking, rằng một sự thay đổi thiết kế vật lý là có lợi, chúng tôi sẽ tự động kích hoạt các sáng tạo hoặc xóa chỉ mục.
- Bản chất trực tuyến của vấn đề của chúng tôi ngụ ý rằng chúng ta thường sẽ tụt hậu so với các giải pháp tối ưu để biết tương lai. Tuy nhiên, bằng cách đo lường cẩn thận bằng chứng, chúng tôi đảm bảo rằng chúng tôi không bị ảnh hưởng bởi các quyết định muộn của muộn, do đó, ràng buộc số tiền mất mát phát sinh
Việc thực hiện thuật toán cho phép điều chỉnh để đáp ứng với những thay đổi trong tải máy chủ và cũng có thể hủy bỏ việc tạo chỉ mục nếu trong quá trình tạo, thay đổi khối lượng công việc và lợi ích dự kiến sẽ giảm xuống dưới mức mà nó được coi là đáng giá.
Kết luận của các tác giả về chủ đề Trực tuyến so với điều chỉnh vật lý truyền thống.
Các thuật toán trực tuyến trong công việc này rất hữu ích khi các DBA không chắc chắn về hành vi trong tương lai của khối lượng công việc hoặc không có khả năng thực hiện phân tích toàn diện hoặc mô hình hóa. Nếu một DBA có thông tin đầy đủ về các đặc điểm khối lượng công việc, thì phân tích tĩnh và triển khai bằng các công cụ hiện có (ví dụ: [2, 3]) sẽ là lựa chọn thay thế tốt hơn.
Các kết luận ở đây tương tự như kết luận trong một bài viết khác Điều chỉnh chỉ mục theo hướng truy vấn tự động
Cách tiếp cận của chúng tôi không thể đánh bại trình cố vấn chỉ mục nếu toàn bộ khối lượng công việc được biết trước. Tuy nhiên, trong các môi trường động với khối lượng công việc phát triển và thay đổi, cách tiếp cận theo hướng truy vấn tạo ra kết quả tốt hơn.
Thiết kế chỉ mục mà bạn đặt vào vị trí là một thứ gì đó nghệ thuật hơn là một khoa học. RDBMS không đủ thông minh để nhận khối lượng công việc chung và thiết kế một chiến lược lập chỉ mục thông minh. Tùy thuộc vào sự can thiệp của con người (đọc: DBA) để phân tích khối lượng công việc và xác định phương pháp tốt nhất là gì.
Nếu không có hình phạt nào về việc có các chỉ số thì đó sẽ là một cách tiếp cận shotgun để chỉ cần thêm một số lượng vô hạn các chỉ mục. Nhưng bởi vì sửa đổi dữ liệu (INSERTS, CẬP NHẬT và XÓA) có tác động đến các chỉ mục được kích hoạt trên một bảng nên sẽ có chi phí thay đổi của các chỉ mục này.
Cần có thiết kế và chiến lược của con người để tạo ra các chỉ mục một cách thông minh giúp tối đa hóa hiệu suất đọc, trong khi có ít chi phí sửa đổi dữ liệu nhất.
Trong thực tế, có một số cơ sở dữ liệu làm điều này. Ví dụ: BigTable của Google và SimpleDB của Amazon tự động tạo các chỉ mục (mặc dù không phải là RDBMS) . Ngoài ra còn có ít nhất một công cụ MySQL RDBMS thực hiện việc này. SQL Server cũng theo dõi các chỉ số mà nó nghĩ bạn nên tạo , mặc dù nó không đi xa đến mức thực sự tạo ra chúng.
Vấn đề rất khó để có được chính xác, vì vậy không có gì lạ khi hầu hết các cơ sở dữ liệu không tự động tạo ra chúng (BigTable / SimpleDB thoát khỏi nó vì chúng không cho phép tham gia tùy ý, giúp mọi việc dễ dàng hơn đáng kể) . Ngoài ra, tạo các chỉ mục một cách nhanh chóng là một quá trình tốn thời gian, đòi hỏi quyền truy cập độc quyền vào toàn bộ bảng - chắc chắn không phải là điều bạn muốn xảy ra trong khi bảng trực tuyến.
Tuy nhiên, với số lượng ứng dụng web LAMP được viết bởi những người nghiệp dư thậm chí không biết chỉ số là gì , tôi vẫn nghĩ rằng tính năng này sẽ có ích cho một số người.
rdbms
và tôi không nghĩ rằng BigTable nằm trong danh mục.
Mặc dù đã có một số câu trả lời mở rộng, nhưng dường như chúng xoay quanh câu trả lời thực sự: Chỉ số không phải lúc nào cũng được mong muốn.
Với sự tương tự xe được đề cập trong các bình luận, bạn sẽ tốt hơn khi nói tại sao tất cả các xe không được trang bị các gói thể thao khắc nghiệt? Một phần là chi phí, nhưng cũng có một thực tế là nhiều người không cần hoặc không muốn lốp có cấu hình thấp và hệ thống treo cứng đá; nó không thoải mái một cách không cần thiết.
Vì vậy, có thể bạn có 1.000 lượt đọc cho mỗi lần chèn, tại sao không có chỉ mục được tạo tự động? Nếu bảng rộng và các truy vấn khác nhau, tại sao không có nhiều? Có thể cam kết là thời gian quan trọng và đọc không; trong trường hợp có thể không thể chấp nhận để làm chậm chèn của bạn. Có thể bạn đang làm việc với không gian đĩa hạn chế và bạn không đủ khả năng để có thêm các chỉ mục ăn vào không gian bạn có.
Vấn đề là, các chỉ mục không được tạo tự động vì chúng không phải là câu trả lời cho mọi thứ. Thiết kế các chỉ mục không chỉ đơn giản là một trường hợp nói "hey điều này sẽ tăng tốc độ đọc của tôi", có những yếu tố khác để xem xét.
Họ không thông minh, họ là một đoạn mã. Mỗi khi bạn nhập dữ liệu mới vào cơ sở dữ liệu, nó cần tìm một vị trí mới cho nó và bản đồ để tìm nó khi được yêu cầu. Lập chỉ mục âm thanh dễ dàng hơn nó, bạn chỉ cần cung cấp một số mới cho một khối dữ liệu mới? Chà, làm thế nào nếu truy vấn tiếp theo không phải là về đoạn dữ liệu cuối cùng mà là về 36271 chuncks trước đó? Bạn có thể dễ dàng tìm thấy nó với chỉ mục của bạn, phải không? Nhưng điều gì sẽ xảy ra nếu truy vấn bao gồm một từ như "câu cá" được tìm thấy trong đoạn 36271 cũ được thực hiện vào năm 1997? Hồ? Không phải là một từ về câu cá trong bài viết cũ.
Nếu dữ liệu đến từng cơ sở dữ liệu, nó có thể được lập chỉ mục như thế. Nhưng lập chỉ mục đơn giản sẽ khiến bạn có kết quả sai và / hoặc chậm hiệu suất sớm hay muộn ...