Câu hỏi Việc lập chỉ mục cơ sở dữ liệu hoạt động như thế nào?


Do việc lập chỉ mục rất quan trọng vì tập dữ liệu của bạn tăng kích thước, ai đó có thể giải thích cách lập chỉ mục hoạt động ở cấp độ cơ sở dữ liệu-thuyết bất khả tri?

Để biết thông tin về các truy vấn để lập chỉ mục một trường, hãy kiểm tra Làm cách nào để tôi lập chỉ mục cột cơ sở dữ liệu.


1878
2017-08-04 10:07


gốc


Bạn có thể kiểm tra - Việc lập chỉ mục cơ sở dữ liệu hoạt động như thế nào? - Aniket Thakur


Các câu trả lời:


Tại sao nó lại cần thiết?

Khi dữ liệu được lưu trữ trên các thiết bị lưu trữ dựa trên đĩa, nó được lưu trữ dưới dạng các khối dữ liệu. Các khối này được truy cập toàn bộ, làm cho chúng hoạt động truy cập đĩa nguyên tử. Các khối đĩa được cấu trúc theo cách tương tự như các danh sách liên kết; cả hai đều chứa một phần cho dữ liệu, một con trỏ đến vị trí của nút tiếp theo (hoặc khối), và cả hai đều không cần được lưu trữ liên tục.

Do thực tế rằng một số bản ghi chỉ có thể được sắp xếp trên một trường, chúng tôi có thể tuyên bố rằng tìm kiếm trên một trường không được sắp xếp yêu cầu Tìm kiếm tuyến tính yêu cầu N/2 chặn truy cập (trung bình), ở đâu N là số khối mà bảng trải dài. Nếu trường đó là trường không phải khóa (nghĩa là không chứa các mục nhập duy nhất) thì toàn bộ không gian bảng phải được tìm kiếm tại N chặn truy cập.

Trong khi với một trường được sắp xếp, một tìm kiếm nhị phân có thể được sử dụng, trong đó có log2 N chặn truy cập. Ngoài ra, do dữ liệu được sắp xếp được cung cấp cho trường không phải khóa, phần còn lại của bảng không cần phải tìm kiếm các giá trị trùng lặp, sau khi tìm thấy giá trị cao hơn. Do đó hiệu suất tăng là đáng kể.

Lập chỉ mục là gì?

Lập chỉ mục là cách phân loại một số bản ghi trên nhiều trường. Việc tạo một chỉ mục trên một trường trong một bảng sẽ tạo ra một cấu trúc dữ liệu khác chứa giá trị trường và con trỏ đến bản ghi mà nó liên quan đến. Cấu trúc chỉ mục này sau đó được sắp xếp, cho phép thực hiện tìm kiếm nhị phân trên nó.

Nhược điểm để lập chỉ mục là các chỉ mục này yêu cầu không gian bổ sung trên đĩa vì các chỉ mục được lưu trữ cùng nhau trong bảng bằng cách sử dụng công cụ MyISAM, tệp này có thể nhanh chóng đạt đến giới hạn kích thước của hệ thống tệp cơ bản nếu nhiều trường trong cùng một bảng được lập chỉ mục .

Làm thế nào nó hoạt động?

Trước hết, hãy phác thảo lược đồ bảng cơ sở dữ liệu mẫu;

Tên trường Kiểu dữ liệu Kích thước trên đĩa
id (khóa chính) Unsigned INT 4 byte
firstName Char (50) 50 byte
lastName Char (50) 50 byte
emailThêm Char (100) 100 byte

chú thích: char được sử dụng thay cho varchar để cho phép kích thước chính xác trên giá trị đĩa. Cơ sở dữ liệu mẫu này chứa năm triệu hàng và không được lập chỉ mục. Hiệu suất của một số truy vấn bây giờ sẽ được phân tích. Đây là một truy vấn bằng cách sử dụng ID (một trường khóa được sắp xếp) và một bằng cách sử dụng tên đầu tiên (trường không có khóa không phân biệt).

ví dụ 1 - - được sắp xếp so với các trường chưa được phân loại

Với cơ sở dữ liệu mẫu của chúng tôi về r = 5,000,000 bản ghi có kích thước cố định cho độ dài bản ghi là R = 204 byte và chúng được lưu trữ trong một bảng bằng cách sử dụng công cụ MyISAM đang sử dụng kích thước khối mặc định B = 1,024byte. Hệ số chặn của bảng sẽ là bfr = (B/R) = 1024/204 = 5 bản ghi trên mỗi khối đĩa. Tổng số khối cần thiết để giữ bảng là N = (r/bfr) = 5000000/5 = 1,000,000 khối.

Tìm kiếm tuyến tính trên trường id sẽ yêu cầu mức trung bình N/2 = 500,000 chặn truy cập để tìm một giá trị, cho rằng trường id là một trường khóa. Nhưng kể từ khi trường id cũng được sắp xếp, một tìm kiếm nhị phân có thể được tiến hành yêu cầu trung bình log2 1000000 = 19.93 = 20 chặn truy cập. Ngay lập tức chúng ta có thể thấy đây là một cải tiến mạnh mẽ.

Bây giờ tên đầu tiên trường không được sắp xếp và cũng không phải là trường khóa, do đó tìm kiếm nhị phân là không thể, cũng không phải là các giá trị duy nhất và do đó bảng sẽ yêu cầu tìm kiếm kết thúc chính xác N = 1,000,000 chặn truy cập. Đây là tình huống mà việc lập chỉ mục nhằm mục đích sửa chữa.

Cho rằng một bản ghi chỉ mục chỉ chứa trường được lập chỉ mục và một con trỏ tới bản ghi ban đầu, nó là lý do khiến nó sẽ nhỏ hơn bản ghi nhiều trường mà nó trỏ tới. Vì vậy, bản thân chỉ mục đòi hỏi ít khối đĩa hơn so với bảng ban đầu, do đó yêu cầu truy cập khối ít hơn để lặp qua. Giản đồ cho một chỉ mục trên tên đầu tiên lĩnh vực được nêu dưới đây;

Tên trường Kiểu dữ liệu Kích thước trên đĩa
firstName Char (50) 50 byte
(con trỏ ghi) Đặc biệt 4 byte

chú thích: Con trỏ trong MySQL là 2, 3, 4 hoặc 5 byte tùy thuộc vào kích thước của bảng.

Ví dụ 2  - - lập chỉ mục

Với cơ sở dữ liệu mẫu của chúng tôi về r = 5,000,000 bản ghi có độ dài bản ghi chỉ mục của R = 54 byte và sử dụng kích thước khối mặc định B = 1,024 byte. Hệ số chặn của chỉ mục sẽ là bfr = (B/R) = 1024/54 = 18 bản ghi trên mỗi khối đĩa. Tổng số khối cần thiết để giữ chỉ mục là N = (r/bfr) = 5000000/18 = 277,778 khối.

Bây giờ, tìm kiếm bằng cách sử dụng tên đầu tiên trường có thể sử dụng chỉ mục để tăng hiệu suất. Điều này cho phép tìm kiếm nhị phân chỉ mục với mức trung bình là log2 277778 = 18.08 = 19 chặn truy cập. Để tìm địa chỉ của bản ghi thực, yêu cầu phải có thêm quyền truy cập chặn để đọc, đưa tổng số vào 19 + 1 = 20 khối truy cập, một tiếng kêu xa từ 1.000.000 khối truy cập cần thiết để tìm một tên đầu tiên khớp trong bảng không được lập chỉ mục.

Nó nên được sử dụng lúc nào?

Do việc tạo chỉ mục yêu cầu không gian đĩa bổ sung (277,778 khối bổ sung từ ví dụ trên, tăng ~ 28%) và quá nhiều chỉ mục có thể gây ra các vấn đề phát sinh từ giới hạn kích thước của hệ thống tệp, nên sử dụng cẩn thận để chọn đúng các trường để lập chỉ mục.

Vì các chỉ mục chỉ được sử dụng để tăng tốc độ tìm kiếm trường phù hợp trong các bản ghi, nên lý do chỉ mục các trường chỉ được sử dụng cho đầu ra sẽ đơn giản là lãng phí dung lượng đĩa và thời gian xử lý khi thực hiện thao tác chèn hoặc xóa. nên tránh. Cũng được cho bản chất của một tìm kiếm nhị phân, cardinality hoặc tính duy nhất của dữ liệu là quan trọng. Lập chỉ mục trên một trường có bản số của 2 sẽ chia dữ liệu thành một nửa, trong khi một bản số 1.000 sẽ trả lại khoảng 1.000 bản ghi. Với cardinality thấp như vậy hiệu quả được giảm xuống một loại tuyến tính, và trình tối ưu hóa truy vấn sẽ tránh sử dụng chỉ mục nếu cardinality nhỏ hơn 30% số bản ghi, làm cho chỉ mục trở thành lãng phí không gian.


2852
2017-08-04 10:41



tìm kiếm nhị phân có thể được thực hiện khi dữ liệu là duy nhất, tôi có đúng không? mặc dù bạn đã đề cập rằng cardinality tối thiểu là quan trọng, thuật toán sẽ không phải là một tìm kiếm nhị phân đơn giản, làm thế nào sẽ xấp xỉ này (~ log2 n) ảnh hưởng đến thời gian quá trình? - shampoo
@AbhishekShivkumar: Câu hỏi tuyệt vời! Tôi nghĩ rằng bảng chỉ mục sẽ có nhiều hàng như có trong bảng dữ liệu. Và vì trường này sẽ chỉ có 2 giá trị (boolean với true / false) và nói rằng bạn muốn bản ghi có giá trị true, sau đó bạn chỉ có thể giảm một nửa tập kết quả trong lần đầu tiên, trong lần thứ hai, tất cả các bản ghi của bạn đều có giá trị đúng. không có cơ sở để phân biệt, bây giờ bạn phải tìm kiếm bảng dữ liệu theo kiểu thời trang tuyến tính - do đó ông ta nên xem xét số lượng thẻ trong khi quyết định cột được lập chỉ mục. Trong trường hợp này, nó không có giá trị để lập chỉ mục trên một cột như vậy. Hy vọng tôi là chính xác :) - Saurabh Patil
không nên số lượng truy cập chặn trong trường hợp trung bình là (N+1)/2. Nếu chúng ta tính tổng số lượng truy cập khối cho tất cả các trường hợp có thể, và chia cho số trường hợp, thì chúng ta có N*(N+1)/(2*n) mà đi ra được (N+1)/2. - ajay
Tôi nghĩ rằng có một vài lỗi chính tả trong câu trả lời này, ví dụ, trong câu: "một xa khóc từ 277.778 khối truy cập theo yêu cầu của bảng không được lập chỉ mục." tác giả có nghĩa là 1.000.000 lượt truy cập không? 277,778 là số lượng khối yêu cầu của chính chỉ mục. Dường như có một vài điểm không chính xác khác nữa :( - jcm
@jcm Ông giải thích nó trong phần "Mục chỉ mục là gì" - "Lập chỉ mục là cách phân loại một số bản ghi trên nhiều trường. Tạo chỉ mục trên một trường trong bảng tạo cấu trúc dữ liệu khác chứa giá trị trường và con trỏ đến bản ghi nó liên quan đến. Cấu trúc chỉ mục này sau đó được sắp xếp, cho phép tìm kiếm nhị phân được thực hiện trên đó. " - grinch


Lần đầu tiên tôi đọc nó rất hữu ích cho tôi. Cảm ơn bạn.

Kể từ đó tôi đã đạt được một số thông tin chi tiết về nhược điểm của việc tạo chỉ mục: nếu bạn viết vào một bảng (UPDATE hoặc là INSERT) với một chỉ mục, bạn thực sự có hai thao tác ghi trong hệ thống tệp. Một cho dữ liệu bảng và một dữ liệu khác cho dữ liệu chỉ mục (và việc sử dụng dữ liệu đó (và - nếu được nhóm lại - việc sử dụng dữ liệu bảng)). Nếu bảng và chỉ mục nằm trên cùng một đĩa cứng thì chi phí sẽ tốn nhiều thời gian hơn. Do đó một bảng không có chỉ mục (một đống), sẽ cho phép các hoạt động ghi nhanh hơn. (nếu bạn có hai chỉ mục, bạn sẽ kết thúc với ba thao tác ghi, v.v.)

Tuy nhiên, việc xác định hai vị trí khác nhau trên hai đĩa cứng khác nhau cho dữ liệu chỉ mục và dữ liệu bảng có thể giảm / loại bỏ vấn đề tăng chi phí thời gian. Điều này đòi hỏi định nghĩa của các nhóm tập tin bổ sung với các tập tin theo định dạng trên đĩa cứng mong muốn và định nghĩa vị trí bảng / chỉ mục như mong muốn.

Một vấn đề khác với các chỉ mục là sự phân mảnh của chúng theo thời gian khi dữ liệu được chèn vào. REORGANIZE giúp, bạn phải viết thói quen để làm nó.

Trong các trường hợp nhất định, vùng heap hữu ích hơn một bảng có chỉ mục,

ví dụ: - Nếu bạn có nhiều bài viết cạnh tranh nhưng chỉ có một đêm đọc ngoài giờ làm việc để báo cáo.

Ngoài ra, sự khác biệt giữa các chỉ số nhóm và không nhóm lại là khá quan trọng.

Giúp tôi: - Chỉ số Clustered và Non clustered thực sự có ý nghĩa gì?


176
2018-04-30 14:31



Tôi nghĩ, những vấn đề lập chỉ mục này có thể được giải quyết bằng cách duy trì hai cơ sở dữ liệu khác nhau, giống như Master và Slave. Trường hợp Master có thể được sử dụng để chèn hoặc cập nhật các bản ghi. Không có chỉ mục. Và nô lệ có thể được sử dụng để đọc với đúng chỉ mục đúng ??? - bharatesh
không, sai, xin lỗi. không chỉ nội dung của các bảng phải được cập nhật, mà còn là cấu trúc chỉ mục và nội dung (b-tree, nodes). khái niệm về chủ nhân và nô lệ của bạn không có ý nghĩa ở đây. những gì có thể khả thi mặc dù là nhân rộng hoặc phản chiếu đến một cơ sở dữ liệu thứ hai mà trên đó phân tích diễn ra để lấy khối lượng công việc đó ra khỏi cơ sở dữ liệu đầu tiên. cơ sở dữ liệu thứ hai sẽ giữ bản sao dữ liệu và lập chỉ mục trên dữ liệu đó. - Der U
Ya ...! Hãy thử đọc nhận xét của tôi và hiểu nó đúng cách. Tôi cũng đã nói như vậy, tôi gọi chủ nhân và nô lệ (bất cứ điều gì) là "eplicating hoặc phản chiếu đến một cơ sở dữ liệu thứ hai mà trên đó phân tích diễn ra để lấy khối lượng công việc đó ra khỏi cơ sở dữ liệu đầu tiên. dữ liệu đó " - bharatesh
cơ sở dữ liệu thứ hai - để phản chiếu hoặc sao chép được thực hiện, slave - sẽ trải nghiệm tất cả các thao tác dữ liệu như thao tác đầu tiên. với mỗi hoạt động dml, các chỉ mục trên cơ sở dữ liệu thứ hai đó sẽ gặp phải "các vấn đề lập chỉ mục này". tôi không thấy sự gia tăng trong đó, nơi mà các chỉ mục là cần thiết và được xây dựng để phân tích nhanh chóng, chúng cần phải được cập nhật. - Der U


Chỉ mục chỉ là cấu trúc dữ liệu giúp tìm kiếm nhanh hơn cho một cột cụ thể trong cơ sở dữ liệu. Cấu trúc này thường là một cây b hoặc một bảng băm nhưng nó có thể là bất kỳ cấu trúc logic nào khác.

Để biết thêm thông tin, tôi khuyên bạn nên: Các chỉ mục cơ sở dữ liệu hoạt động như thế nào? Và, làm thế nào để chỉ số giúp?


131
2018-02-20 14:40



+1 lần một triệu cho câu trả lời này, khi tôi tìm thấy danh sách này trong khi cố gắng tìm một lời giải thích đơn giản về việc lập chỉ mục cơ bản là gì. - Josh Burson


Bây giờ, giả sử chúng tôi muốn chạy truy vấn để tìm tất cả các chi tiết của bất kỳ nhân viên nào có tên ‘Abc’?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

Điều gì sẽ xảy ra mà không có chỉ mục?

Phần mềm cơ sở dữ liệu theo nghĩa đen sẽ phải xem xét mọi hàng đơn trong bảng Employee để xem Employee_Name cho hàng đó có phải là ‘Abc’ hay không. Và, bởi vì chúng tôi muốn mỗi hàng có tên ‘Abc’ bên trong nó, chúng tôi không thể ngừng tìm kiếm khi chúng tôi tìm thấy một hàng có tên ‘Abc’, bởi vì có thể có các hàng khác có tên Abc. Vì vậy, mỗi hàng lên cho đến khi hàng cuối cùng phải được tìm kiếm - có nghĩa là hàng ngàn hàng trong kịch bản này sẽ phải được kiểm tra bởi cơ sở dữ liệu để tìm các hàng có tên ‘Abc’. Đây là cái được gọi là toàn bảng quét

Chỉ số cơ sở dữ liệu có thể giúp hiệu suất như thế nào

Toàn bộ điểm có chỉ số là tăng tốc các truy vấn tìm kiếm bằng cách giảm số lượng bản ghi / hàng trong một bảng cần được kiểm tra. Chỉ mục là một cấu trúc dữ liệu (thường là một cây B) lưu trữ các giá trị cho một cột cụ thể trong một bảng.

Chỉ số B-tree hoạt động như thế nào?

Lý do B- cây là cấu trúc dữ liệu phổ biến nhất cho các chỉ mục là do chúng có hiệu quả về thời gian - bởi vì việc tra cứu, xóa và chèn có thể được thực hiện trong thời gian logarit. Và, một lý do chính khác B-cây thường được sử dụng hơn là vì dữ liệu được lưu trữ bên trong cây B có thể được sắp xếp. RDBMS thường xác định cấu trúc dữ liệu nào thực sự được sử dụng cho một chỉ mục. Tuy nhiên, trong một số trường hợp với một số RDBMS nhất định, bạn có thể chỉ định cấu trúc dữ liệu nào bạn muốn cơ sở dữ liệu của mình sử dụng khi bạn tạo chính chỉ mục đó.

Chỉ số bảng băm hoạt động như thế nào?

Lý do chỉ số băm được sử dụng là vì bảng băm cực kỳ hiệu quả khi nói đến chỉ tìm kiếm các giá trị. Vì vậy, các truy vấn so sánh bình đẳng với một chuỗi có thể lấy các giá trị rất nhanh nếu chúng sử dụng một chỉ mục băm.

Ví dụ, truy vấn mà chúng ta đã thảo luận trước đó có thể được hưởng lợi từ một chỉ mục băm được tạo trên cột Employee_Name. Cách một chỉ mục băm sẽ làm việc là giá trị cột sẽ là chìa khóa vào bảng băm và giá trị thực được ánh xạ tới khóa đó sẽ chỉ là một con trỏ tới dữ liệu hàng trong bảng. Vì một bảng băm cơ bản là một mảng kết hợp, một mục điển hình sẽ trông giống như “Abc => 0x28939 ″, trong đó 0x28939 là một tham chiếu đến hàng của bảng, trong đó Abc được lưu trữ trong bộ nhớ. Tìm kiếm một giá trị như “Abc” trong chỉ mục bảng băm và lấy lại tham chiếu đến hàng trong bộ nhớ rõ ràng nhanh hơn rất nhiều so với quét bảng để tìm tất cả các hàng có giá trị “Abc” trong cột Employee_Name.

Những bất lợi của chỉ số băm

Bảng băm không được sắp xếp cấu trúc dữ liệu, và có rất nhiều loại truy vấn mà chỉ mục băm thậm chí không thể trợ giúp. Ví dụ, giả sử bạn muốn tìm tất cả các nhân viên dưới 40 tuổi. Làm thế nào bạn có thể làm điều đó với một chỉ mục bảng băm? Vâng, điều đó là không thể vì bảng băm chỉ tốt để tra cứu cặp giá trị chính - có nghĩa là các truy vấn kiểm tra sự bình đẳng

Chính xác những gì nằm bên trong một chỉ số cơ sở dữ liệu? Vì vậy, bây giờ bạn biết rằng một chỉ mục cơ sở dữ liệu được tạo trên một cột trong một bảng và chỉ mục lưu trữ các giá trị trong cột cụ thể đó. Nhưng, điều quan trọng là phải hiểu rằng một chỉ mục cơ sở dữ liệu không lưu trữ các giá trị trong các cột khác của cùng một bảng. Ví dụ, nếu chúng ta tạo một chỉ mục trên cột Employee_Name, điều này có nghĩa là các giá trị cột Employee_Age và Employee_Address cũng không được lưu trữ trong chỉ mục. Nếu chúng ta đã lưu trữ tất cả các cột khác trong chỉ mục, thì nó sẽ giống như tạo một bản sao khác của toàn bộ bảng - sẽ chiếm quá nhiều không gian và sẽ rất kém hiệu quả.

Cơ sở dữ liệu biết khi nào sử dụng một chỉ mục? Khi một truy vấn như “SELECT * FROM Employee WHERE Employee_Name =‘ Abc ’” được chạy, cơ sở dữ liệu sẽ kiểm tra xem liệu có một chỉ mục trên (các) cột được truy vấn hay không. Giả sử cột Employee_Name có một chỉ mục được tạo trên nó, cơ sở dữ liệu sẽ phải quyết định xem có sử dụng chỉ mục để tìm các giá trị được tìm kiếm hay không - vì có một số tình huống thực sự kém hiệu quả khi sử dụng chỉ mục cơ sở dữ liệu và hiệu quả hơn chỉ để quét toàn bộ bảng.

Chi phí của việc có chỉ mục cơ sở dữ liệu là bao nhiêu?

Nó chiếm không gian - và bảng của bạn càng lớn, chỉ mục của bạn càng lớn. Một hiệu suất khác với các chỉ mục là một thực tế là bất cứ khi nào bạn thêm, xóa hoặc cập nhật các hàng trong bảng tương ứng, các hoạt động tương tự sẽ phải được thực hiện cho chỉ mục của bạn. Hãy nhớ rằng chỉ mục cần chứa cùng một dữ liệu tối đa như bất kỳ thứ gì trong cột (các) cột mà chỉ mục bao hàm.

Theo nguyên tắc chung, chỉ nên tạo chỉ mục trên bảng nếu dữ liệu trong cột được lập chỉ mục sẽ được truy vấn thường xuyên.

Xem thêm

  1. Các cột nào thường tạo ra các chỉ mục tốt?
  2. Các chỉ mục cơ sở dữ liệu hoạt động như thế nào

94
2017-08-13 18:36



"một chỉ mục cơ sở dữ liệu không lưu trữ các giá trị trong các cột khác" - không đúng sự thật. - mustaccio
@mustaccio: Chỉ mục lưu trữ tham chiếu của hàng với các cột được lập chỉ mục (như tôi biết). Tôi có thể sai. Bạn có bất kỳ tham chiếu nào nói rằng chỉ mục lưu trữ các giá trị cột khác không? - Somnath Muluk
@ To Downvoters: Bạn có thể giải thích điều gì sai để tôi có thể cải thiện không? - Somnath Muluk
Kiểm tra các chỉ mục phân cụm SQL Server hoặc DB2 CREATE INDEX ... INCLUDE mệnh đề. Bạn có quá nhiều khái quát trong câu trả lời của bạn, theo quan điểm của tôi. - mustaccio
@mustaccio: Vì vậy, theo mặc định create index không bao gồm các cột khác và tại sao nó nên. If we did just store all the other columns in the index, then it would be just like creating another copy of the entire table, which would take up way too much space and would be very inefficient.. Đây là phiên bản tổng quát hơn của các chỉ mục. CREATE INDEX ... INCLUDE là phiên bản mới hơn bằng cách xem xét các cột khác. Bài viết tôi đã giải thích đang xem xét phiên bản tổng quát hơn. Các chỉ số hoạt động như thế nào sẽ là một cuốn sách nếu chúng ta xem xét tất cả các cơ sở dữ liệu? Phải không? Bạn có nghĩ rằng câu trả lời xứng đáng được đánh giá thấp? - Somnath Muluk


Ví dụ cổ điển "Chỉ mục trong sách"

Xem xét một "Sách" của 1000 trang, chia cho 100 phần, mỗi phần với các trang X.

Đơn giản, huh?

Bây giờ, không có trang chỉ mục, để tìm một phần cụ thể bắt đầu bằng chữ cái "S", bạn không có tùy chọn nào khác ngoài việc quét qua toàn bộ cuốn sách. ví dụ: 1000 trang

Nhưng với một trang chỉ mục ngay từ đầu, bạn đang ở đó. Và nhiều hơn nữa, để đọc bất kỳ phần cụ thể nào quan trọng, bạn chỉ cần xem lại trang chỉ mục, lặp đi lặp lại, mọi lúc. Sau khi tìm thấy chỉ mục phù hợp, bạn có thể chuyển đến phần này một cách hiệu quả bằng cách bỏ qua các phần khác.

Nhưng sau đó, ngoài 1000 trang, bạn sẽ cần thêm 10 trang khác để hiển thị trang chỉ mục, vì vậy hoàn toàn là 1010 trang.

Do đó, chỉ mục là một phần riêng biệt lưu trữ các giá trị của chỉ mục cột + con trỏ tới hàng được lập chỉ mục theo thứ tự được sắp xếp để tìm kiếm hiệu quả.

Mọi thứ đơn giản trong trường học, phải không? : P


86
2018-04-23 14:43



thực sự tốt đẹp tương tự! buồn cười tôi đã không tạo kết nối giữa chỉ mục sách và chỉ mục db - Yolo Voe
Lời giải thích tốt đẹp cho một sự hiểu biết nhanh chóng: D - ndh103


Mô tả đơn giản !!!!!!!!!!

Chỉ mục không là gì ngoài cấu trúc dữ liệu lưu trữ các giá trị cho một cột cụ thể trong một bảng. Một chỉ mục được tạo trên một cột của một bảng.

Ví dụ, chúng ta có một bảng cơ sở dữ liệu được gọi là User với ba cột - Name, Age và Address. Giả sử rằng bảng User có hàng ngàn hàng.

Bây giờ, giả sử chúng tôi muốn chạy truy vấn để tìm tất cả các chi tiết của bất kỳ người dùng nào có tên là 'John'. Nếu chúng ta chạy truy vấn sau đây.

SELECT * FROM User 
WHERE Name = 'John'

Phần mềm cơ sở dữ liệu theo nghĩa đen sẽ phải xem xét mọi hàng trong bảng Người dùng để xem Tên của hàng đó có phải là 'John' hay không. Việc này sẽ mất nhiều thời gian.
Đây là nơi chỉ mục giúp chúng tôi "chỉ mục được sử dụng để tăng tốc các truy vấn tìm kiếm bằng cách giảm số lượng bản ghi / hàng trong một bảng cần được kiểm tra".
Cách tạo chỉ mục

CREATE INDEX name_index
ON User (Name)

Một chỉ mục bao gồm các giá trị cột (ví dụ: John) từ một bảng và các giá trị đó được lưu trữ trong một cấu trúc dữ liệu.
Vì vậy, bây giờ cơ sở dữ liệu sẽ sử dụng chỉ mục để tìm các nhân viên có tên là John vì chỉ mục có lẽ sẽ được sắp xếp theo thứ tự bảng chữ cái theo tên Người dùng. Và, bởi vì nó được sắp xếp, nó có nghĩa là tìm kiếm một tên nhanh hơn rất nhiều bởi vì tất cả các tên bắt đầu bằng chữ "J" sẽ nằm ngay cạnh nhau trong chỉ mục!


47
2017-08-02 01:30





Chỉ cần một gợi ý nhanh chóng .. Vì chi phí lập chỉ mục bạn bổ sung và không gian lưu trữ, vì vậy nếu ứng dụng của bạn yêu cầu thêm thao tác chèn / cập nhật, bạn có thể muốn sử dụng các bảng không có chỉ mục, nhưng nếu nó đòi hỏi nhiều hoạt động truy xuất dữ liệu hơn, bạn nên lập chỉ mục bàn.


21
2018-01-14 06:44



Đây là một bình luận, không phải là một câu trả lời. - RonJohn