Tại sao cơ sở dữ liệu không tự động tạo chỉ mục của riêng họ?


32

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.


3
Xe của bạn có tự động sửa lốp xe không?
Kermit

11
Một điều tương tự chính xác hơn là ECU của bạn có thay đổi năng lượng cung cấp cho bơm nhiên liệu để cố định tốc độ dòng nhiên liệu / dầu và bù cho các đường bẩn không? câu trả lời là có ..
Jharwood

11
Một cơ sở dữ liệu đã có thể đặt một chỉ mục trên một bảng mà hiện tại chúng tôi yêu cầu chúng tôi chỉ huy nó, một chiếc xe thực sự không thể thay thế lốp xe, cho đến khi chúng tôi chế tạo một số cánh tay để sử dụng.
Jharwood

1
Họ làm - cho các cột có UNIQUEràng buộc.
dan04

8
Nếu bạn google "cơ sở dữ liệu tự điều chỉnh", bạn sẽ tìm thấy nhiều nghiên cứu về điều này. Có thể trong tương lai sẽ có một số yếu tố này.
Martin Smith

Câu trả lời:


25

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ị

nhập mô tả hình ảnh ở đây

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,CA,B INCLUDE(C)

Một số vấn đề hiện tại với ý tưởng là

  • Chất lượng của bất kỳ phân tích tự động nào không thực sự tạo ra chỉ số sẽ phụ thuộc nhiều vào độ chính xác của mô hình chi phí.
  • Ngay cả trong lĩnh vực phân tích tự động, một giải pháp ngoại tuyến sẽ có thể triệt để hơn một giải pháp trực tuyến vì điều bắt buộc là một giải pháp trực tuyến không nên thêm sách lớn giữ trên máy chủ trực tiếp và can thiệp vào mục đích chính của nó là thực hiện các truy vấn.
  • Các chỉ mục được tạo tự động để đáp ứng với khối lượng công việc nhất thiết sẽ được tạo để đáp ứng với các truy vấn sẽ thấy chúng hữu ích vì vậy sẽ tụt hậu so với các giải pháp tạo ra các chỉ mục trước.

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.


4
Điều cực kỳ nguy hiểm đối với sự nghiệp của DBA khi cho rằng kỹ năng của anh ta không bao giờ có thể được tự động hóa. Điều đó đang giết chết sự nghiệp của các anh chàng mạng ngay bây giờ vì sự thay đổi là các trung tâm dữ liệu được xác định bằng phần mềm. Là những DBA giỏi, chúng ta nên dẫn đầu nỗ lực tự động hóa.
Gaius

20

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.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Paul White nói GoFundMonica

13

Trong thực tế, có một số cơ sở dữ liệu làm điều này. Ví dụ: BigTable của GoogleSimpleDB 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.


4
Tôi có thể nói rằng việc so sánh BigTable (và các sản phẩm phái sinh của nó, chẳng hạn như Cassandra, HBase, v.v.) với các giải pháp RDBMS đang so sánh táo với cam - BigTable và các sản phẩm phái sinh giống như một kho lưu trữ khóa hoặc giá trị khổng lồ, và khóa hàng vốn là một chỉ mục .
Suman

1
Chính xác. Câu hỏi được gắn thẻ rdbmsvà tôi không nghĩ rằng BigTable nằm trong danh mục.
ypercubeᵀᴹ

2
@ypercube: ... Vâng, tôi đã đề cập đến điều đó trong câu trả lời của tôi; nhưng nó vẫn đáng để biết, ít nhất là một điểm quan tâm. Tôi cũng đã đề cập đến một số cơ sở dữ liệu khác RDBMS, và đã giải thích lý do tại sao nó không phổ biến. Điều này chắc chắn không xứng đáng với một downvote ...
BlueRaja - Danny Pflughoeft

1
Tôi đã không downvote. Tôi đồng ý đó là một vấn đề rất khó khăn.
ypercubeᵀᴹ

10

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.


1
+1 trong khi chắc chắn là có thể và khả thi để tự động hóa công cụ này, chúng tôi sẽ không luôn tốt hơn với một loạt các chỉ số ma thuật được thực hiện bởi một hệ thống không có cái nhìn sâu sắc về cách dữ liệu sẽ được sử dụng vào ngày mai, đừng bận tâm đến việc viết của bạn so với đọc ngưỡng đánh đổi. Tôi đã viết một chút về điều này vào ngày khác , nhưng rõ ràng có rất nhiều điều để nói.
Aaron Bertrand

> 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. Một câu trả lời tốt, rất hữu ích.
Siddhartha

6

Họ có thể phân tích các truy vấn trong quá khứ và đề xuất / tạo chỉ mục tuy nhiên điều này không hoạt động tối ưu vì các chỉ mục đạt được sự cân bằng để tăng tốc những gì bạn muốn được tối ưu hóa với chi phí và máy chủ không thể biết ý định của bạn.


-4

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 ...

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.