Giới thiệu về B-tree index trong database

Lúc nói tới nâng cao hiệu năng của database, việc trước tiên mà chúng ta nghĩ tới sẽ là đánh index cho những trường trong 1 bảng dữ liệu. Trước nay chúng ta đã quá quen có khái niệm này tuy nhiên hiểu được nó là gì và cụ thể như thế nào thì đa số chúng ta còn siêu mơ hồ, bài viết hôm nay mạo phép đi cắt ghép từ nhiều nguồn nhằm giải thích rõ hơn cơ chế hoạt động cũng như tác dụng thực sự của index trong database.

Tại sao lại cần đánh index trong database

Giả sử bạn cần lưu trữ 1 danh sách những member theo tên, và lấy ra 1 mẫu tên lúc cần thiết. việc đơn giản nhất mà chúng ta có thể khiến là lưu vào 1 array và thêm giá trị vào array ấy lúc có 1 merchandise new. Tuy nhiên để đánh giá xem 1 merchandise đã tồn tại trong mảng hay chưa thì bạn cần thông qua mảng , hên xui thì có thể tìm đúng được trong lần trước tiên, đen thì bạn nên tìm tới} lúc thông qua tới hết mảng.

Để tiết kiệm thời kì kiếm tìm, chúng ta dùng 1 số thuật toán, trong ấy có thể nói tới binary seach, Từng lúc muốn search 1 phần tử trong mảng đã được sắp xếp, chúng ta chọn ra 1 worth nằm giữa mảng và so sánh, trường hợp phần tử muốn search mà lớn hơn phần tử giữa đó thì ta chọn phần bên nên, ngược lại thì chọn phần bên trái, cứ thế chia đôi cho tới lúc tìm được chỗ của phần tử cần tìm.

Thí dụ trên là 1 dạng của Binary-Tree, tuy nhiên thay đổi vì lưu trữ worth của mảng thì nó giữ con trỏ , trỏ tới node tiếp theo.

B-Tree là gì?

B-tree là 1 kiến trúc dữ liệu, để lưu trữ dữ liệu dưới dạng những node được sắp xếp theo thứ tự động nhất định.

Xem Thêm  Hướng dẫn cách tải ứng dụng cho iPhone dễ dàng

Giới thiệu về B-tree index trong database

B-Tree lưu trữ dữ liệu theo kiểu từng node lưu trữ key theo thứ tự động nâng cao dần, từng node này lại chứa 2 hợp tác tới những node trước và sau nó. Node bên trái có key <= key node hiện tại, còn node bên nên thì có key >= key của node hiện tại. Giả dụ 1 node mà có n keys thì nó sẽ có cao nhất} là n + 1 node con.

B-Tree index tăng cường độ truy vấn dữ liệu vì storage engine ko nên thông qua cả bảng để kiếm tìm dữ liệu mà nó sẽ đi từ node root. những vùng root node sẽ chưa con trỏ tới những node con, nó tìm đúng con trỏ bằng bí quyết nhìn vào những giá trị trong node con và bằng việc xác định những giới hạn trên và dưới của 1 node, giúp storage engine dễ dàng kiếm tìm sự tồn tại hay ko của 1 giá trị.

Cùng xem cấu trúc tổng quát của B-Tree

Giới thiệu về B-tree index trong database

Phương pháp B-Tree Index hoạt động trong database

Về cấu trúc của B-Tree khá phức tạp vì nó ko chỉ lưu trữ index mà còn lưu trữ cả worth hợp tác có index đó, giá trị này hợp tác tới file dữ liệu thực tế trong database, cặp đôi key-value này được gọi là payload.

Giới thiệu về B-tree index trong database

Chúng ta cùng xem 1 thí dụ để hiểu rõ hơn về cơ chế này lưu trữ và kiếm tìm kiểu B-Tree này

Trước tiên là tạo 1 bảng dữ liệu

CREATE TABLE Individuals ( last_name varchar(50) not null, first_name varchar(50) not null, dob date not null, gender enum(‘m’, ‘f’)not null, key(last_name, first_name, dob) );

Index trên đây chính là last_name, first_name, dob trong bảng Individuals. Giới thiệu về B-tree index trong database

Chú ý rằng trình tự động của index sẽ phụ thuộc vào thứ tự động column trong quy trình chúng ta tạo bảng, lúc 1 giá trị trùng nhau thì giá trị tiếp theo sẽ được lấy khiến tiêu chí để sắp xếp, thí dụ 2 người có cùng tên là Basinger Viven nhưng họ khác ngày sinh nên ngày sinh sẽ được dùng để sắp xếp.

Xem Thêm  Nghiệp quật là gì, Nghiệp báo là gì, những loại nghiệp báo

Những kiểu truy vấn có thể dùng có B-Tree

B-Tree siêu hữu ích trong việc tìm kiểu full worth, hoặc trong 1 dải worth (key vary), hoặc 1 tiền tố xác định (key prefix). Như trong thí dụ trên chúng ta có thể thấy, B-tree

Kiếm tìm toàn bộ giá trị (Full worth)

Là việc kiếm tìm hầu hết toàn bộ giá trị trong những column đã được đánh index thí dụ chúng ta có thể kiếm tìm những người có tên Cuba Allen và sinh 5 1960-01-01

Kiếm tìm tiền tố bên trái

Chúng ta có thể kiếm tìm hầu hết những người có tên Allen, tuy nhiên điều này chỉ ứng dụng có column trước tiên trong index.

Kiếm tìm tiền tố column

Chúng ta có thể kiếm tìm những người có last_name khởi đầu bằng chữ mẫu J, và điều này cũng chỉ hữu ích cho column trước tiên của index.

Kiếm tìm trong 1 giải những giá trị

Điều này giúp chúng ta kiếm tìm những người có tên nằm trong diện khoảng từ Allen tới Barymore. Tuy nhiên nó cũng chỉ hữu ích có column trước tiên của Index.

Kiếm tìm 1 phần và 1 dải trong phần tiếp theo

Giups chúng ta kiếm tìm những người có last_name là Allen và có first_name khởi đầu bằng ký tự động Okay. Nó chỉ có tác dụng có last_name và 1 dải của first_name.

Bởi vì những node trên tree đã được sắp xếp chính vì thế chúng có thể thực hành cả 2 việc là kiếm tìm giá trị và kiếm tìm trên 1 tập đã sắp xếp.

1 số giới hạn của B-Tree

  • Giới hạn lớn nhất của B-Tree chính là việc nó chỉ kiếm tìm phải chăng tại cột bên cạnh cùng bên trái của index.
  • Bạn ko thể bỏ qua columns trong index thí dụ ko thể chỉ kiếm tìm từ last_name và dob mà bỏ qua first_name
  • storage engine ko thể tối ưu truy vấn có bấy kỳ column nào nằm bên nên 1 dải giá trị, thí dụ trường hợp như bạn question WHERE last_name=”Smith” AND first_name LIKE ‘J%’ AND dob=’1976-12-23′ Thì sẽ chỉ có tác dụng trên 2 cột trước tiên bên trai trong index. Bởi vì LIKE trên đây được hiểu như 1 dải những giá trị.
Xem Thêm  Ngày Nghỉ Bù Tiếng Anh Là Gì, Dịch Sang Tiếng Anh Nghỉ Bù Là Gì

Qua đây chúng ta có thể thấy rằng việc sắp xếp những column trong index là vô cùng quan yếu , Để có hiệu suất tối ưu việc tạo chỉ phần cho cùng 1 column có những thứ tự động khác nhau là cần thiết.

Tạo B-Tree index trong mysql

Tạo Index lúc tạo bảng

CREATE TABLE t( c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 INT NOT NULL, c4 VARCHAR(10), INDEX (c2,c3) );

Insert thêm index vào bảng có sẵn

CREATE INDEX index_name ON table_name (column_list)

Add thêm index cho 1 column

CREATE INDEX idx_c4 ON t(c4);

Kết luận

Trên đây là 1 chút giới thiệu về khái niệm đánh chỉ số (indexing) trong database, thông thường lúc nghe tới indexing người ta có thể hiểu nó là B-Tree, bên cạnh B-Tree thì còn 1 dạng khác gọi là Hash-index, tuy nhiên mình sẽ ko nói tới trong bài này. Phần đích là để nâng cao efficiency của hệ thống, truy vấn nhanh hơn, tuy rằng nhược điểm lớn là insert hay replace sẽ bị chậm đi vì nó cần sắp xếp lại chỉ số , giống như việc sắp xếp sách trên giá vậy, nó có tác dụng cho lần kiếm tìm về sau nhưng lại tốn thời kì để bạn tìm được 1 nơi đặt thích hợp. Hy vọng bài viết phần nào giúp ích được cho quý khách. Thanks!