Cơ chế đánh index trong SQL

Bài viết Cơ chế đánh index trong SQL thuộc chủ đề về Giải Đáp Thắc Mắt thời gian này đang được rất nhiều bạn quan tâm đúng không nào !! Hôm nay, Hãy cùng khoalichsu.edu.vn tìm hiểu Cơ chế đánh index trong SQL trong bài viết hôm nay nhé ! Các bạn đang xem nội dung về : “Cơ chế đánh index trong SQL”

Đánh giá về Cơ chế đánh index trong SQL


Xem nhanh
Bài 39 chúng ta sẽ chúng ta sẽ học về khái niệm và cách tạo index trong SQl đồng thời phân biệt giữa Clustered Index và Non clustered index

Chúng ta thường biết rằng trong SQL đánh index giúp tăng tốc độ truy vấn, vậy mọi người đã biết cơ chế của đánh index là gì ? tại sao nó lại giúp đẩy nhanh truy vấn và nhược điểm của nó là gì chưa ? Hôm nay mình xin đc chém gió về chủ đề này.

1. Bài toán thực tế

Chắc hẳn các bạn làm web đều biết về I18n rồi đúng không ? Giả sử bạn có 2 file biên dịch là en.yml và vi.yml. Mỗi dòng bên en.yml tương ứng với vi.yml và ngược lại. Ví dụ:

en.yml: table: "table" 
vi.yml: table: "cái bàn" 

có nghĩa là mỗi từ dịch bằng tiếng anh thì phải dịch bằng Tiếng Việt, vậy số dòng trong file en.yml phải bằng vi.yml. tuy nhiên một ngày đẹp trời bạn nhận ra en.yml có 1000 dòng mà vi.yml chỉ có 999 dòng, có nghĩa là bạn đã bỏ sót ko dịch 1 từ nào đó sang tiếng Việt. Bạn cần tìm ra dòng còn thiếu trong vi.yml để cập nhật, vậy bạn làm cách nào để tìm ra dòng đó nhanh nhất ?

Nếu dò từ trên xuống dưới giữa 2 file với nhau, xui xẻo bạn có thể phải dò tới 999 lần, quá nhiều lần truy vấn. mặc khác có cách để dò tối đa 10 lần là chắc chắn bạn sẽ tìm ra dòng đó. Cách đó như sau: Lần 1 bạn dò ở dòng thứ 500 và so sánh 2 file, nếu khớp từ khóa chứng tỏ 500 dòng đầu tiên không bị miss value (dòng còn thiếu nằm ở nửa còn lại), còn nếu không khớp (bị lệch 1 dòng) thì chứng tỏ 500 dòng đầu tiên có chứa dòng bị miss. Vậy là chỉ 1 lần test bạn đã “cưa đôi” được phạm vi tìm kiếm, và bạn tiếp tục “cưa đôi” thêm tối đa 10 lần nữa bạn sẽ tìm ra dòng còn thiếu. Tại sao lại 10 lần ? Bởi vì 2^10 =1024 >1000.

Mọi Người Xem :   Đăng ký bản quyền tiếng anh là gì - Luật Hùng Sơn

Cơ chế đánh index cũng dựa vào phương pháp cưa đôi như vậy.

✅ Mọi người cũng xem : giá tối thiểu là gì

2. Cơ chế đánh index

Giả sử bạn có 1 bảng 1000 record chứa tên người: “Phong”, “Dung”, “Hải”, … Bạn cần tìm ra người có tên là “Nam”. Vậy cơ chế đánh index sẽ hoạt động ntn trong trường hợp này.

Đầu tiên khi bạn thực hiện đánh index cho trường :name, index sẽ được đánh từ 0 tăng dần tới 999 ( có 1000 record ), đánh theo thứ tự alphabet. Ví dụ: “An” sẽ có index = 0, “Anh” sẽ có index = 1, “Ánh” sẽ có index =2,… lúc này bạn có khả năng hiểu rằng, vô hình chung, các record của mình đã được sắp xếp lại theo trật tự alphabet tăng dần.

Khi bạn thực hiện câu truy vấn Select … where name = “Nam” lúc này nó sẽ dùng phương pháp cưa đôi mà mình nói ở trên, đầu tiên lấy :name ở index thứ 500 ra so sánh với “Nam”, mặc khác ko phải so sánh bằng mà là so sánh xem lớn hơn hay bé hơn, ví dụ record index 500 có :name là “Hoàng” thì khi so sánh sẽ nhận đc kết quả “Hoàng” < “Nam” (theo alphabet) Vì vậy có thể xác định “Nam” nằm ở nửa sau, có index lớn hơn 500. Lại cưa đôi và tìm tiếp. Sau tối đa 10 lần so sánh thì sẽ tìm ra được record có :name là “Nam”.

Khi số lượng record càng thường xuyên thì phương pháp đánh index càng thể hiện rõ tác dụng của mình. Giả sử bạn có 1 triệu record thì bạn cũng chỉ cần so sánh 20 lần là đủ bởi vì 2^20 = 1024^2 > 1000 ^2 = 1000000. Trong khi phương pháp truy vấn thông thường phải so sánh tối đa 999999 lần.

3. Đánh index cho nhiều trường ( B tree)

Đánh index cho nhiều trường hay còn gọi là cách B tree.

Mọi Người Xem :   "ế" là gì? Nghĩa của từ ế trong tiếng Việt. Từ điển Việt-Việt

Giả sử bạn có 1 triệu record tên người, và một người ở một tỉnh/thành nhất định. Bạn cần tìm ra người ở tỉnh “Ninh Bình” có tên là “Nam”. Cơ chế index lúc này sẽ vận hành như thế nào.

Đầu tiên bạn sẽ cần đánh index cho cả trường :province và cả trường :name, lúc này 1 triệu record sẽ đc nhóm lại theo province trước, các province này sẽ được sắp xếp theo thứ tự alphabet, ví dụ “An Giang” có index là 0, “Bà Rịa Vũng Tàu” có index là 1, “Bắc Giang” có index là 2, … Trong nhóm tỉnh/thành, các trường :name lại được đánh index 1 lần nữa. Ví dụ: “An” : 0, “Anh”: 1, “Ánh”: 2, … Việc đánh index trong index như thế này tạo nên các nhánh, nên người ta gọi là B tree.

Khi thực hiện câu truy vấn Select …where province = “Ninh Bình” and name = “Nam”. Đầu tiên sẽ lọc ra những người ở tỉnh “Ninh Bình”. Cơ chế như sau, mỗi tỉnh lấy ra record đầu tiên và đem so sánh với “Ninh Bình” theo phương pháp đánh index, Việt Nam có 64 tỉnh nên chỉ cần tối đa 6 lần so sánh là sẽ tìm đc người nào thuộc tỉnh “Ninh Bình”, từ người đó sẽ lấy ra toàn bộ nhóm đó, sau đó từ nhóm người đó lại sử dụng phương pháp index lọc ra người tên “Nam” một lần nữa.

Hình minh họa về B tree

Câu hỏi được đặt ra là chúng ta nên đánh index cho trường nào trước để tối ưu truy vấn, :province hay :name. Câu trả lời là trường nào ít record hơn thì nên đánh trước. Ở trong bài toán này, thì :province có 64 tỉnh, còn :name thì có hàng trăm ngàn kiểu đặt tên, do đó nhóm theo trường :province trước là hợp lý hơn, vì khi lọc ra trường :proivince thì bạn đã lọc đc 63/64 tỉnh thành ko cần quan tâm tới, tương đương với 1 lượng record cực lớn. Còn nếu bạn đánh theo trường :name, thì gần như record nào bạn cũng phải đụng tới ít nhất 1 lần.

Khi đánh index theo thứ tự nào thì khi truy vấn bạn phải áp dụng đúng thứ tự đó nhé, nếu không thì đánh index sẽ không có tác dụng, ví dụ bạn đánh index cho :province trước rồi mới tới :name thì khi dùng câu SQL “Select … where name = ‘Nam’ and province = ‘Ninh Binh'” thì đánh index là vô dụng .

Mọi Người Xem :   Đại lễ Phật đản Phật lịch 2562 tại Thành phố Hồ Chí Minh | Xã hội | Vietnam+ (VietnamPlus)

✅ Mọi người cũng xem : hiện ra là từ loại gì

4. Nhược điểm của phương pháp đánh index.

Đánh index giúp tăng tốc độ truy vấn, mặc khác sau mỗi lần insert hoặc update hoặc delete (thay đổi db), chúng ta cần thực hiện lại việc đánh index do đó tốc độ khi thực hiện 3 việc này sẽ bớt. Ví dụ ban đầu “An” có index là 0, “Anh” có index là 1, “Ánh” có index là 2, khi xóa “An” đi, thì lúc này “Anh” sẽ có index là 0, “Ánh” sẽ có index là 1, các trường phía sau cũng phải thay đổi tương tự. Vậy nhược điểm của phương pháp đánh index chính là hạn chế tốc độ Insert, update, delete. Nói là hạn chế nhưng thực tế khi update hoặc delete record chúng ta cũng cần truy vấn tới record đó nên tăng cái này hạn chế kia, nhưng việc hạn chế từ 999999 lần so sánh xuống còn 20 lần so sánh thì quá xứng đáng để đánh đổi.

5. Lúc nào thì không nên sử dụng đánh index ?

Khi quá ít record, chi tiết là dưới 10, lúc này đánh index ko phát huy tác dụng vì so sánh bằng dù là 10 lần thực hiện vẫn nhénh hơn so với so sánh kiểm tra xem lớn hơn hay nhỏ hơn thực hiện 3,4 lần.



Các câu hỏi về ý nghĩa index trong sql


Nếu có bắt kỳ câu hỏi thắc mắt nào vê ý nghĩa index trong sql hãy cho chúng mình biết nhé, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình cải thiện hơn trong các bài sau nhé <3 Bài viết ý nghĩa index trong sql ! được mình và team xem xét cũng như tổng hợp từ nhiều nguồn. Nếu thấy bài viết ý nghĩa index trong sql Cực hay ! Hay thì hãy ủng hộ team Like hoặc share. Nếu thấy bài viết ý nghĩa index trong sql rât hay ! chưa hay, hoặc cần bổ sung. Bạn góp ý giúp mình nhé!!

Các Hình Ảnh Về ý nghĩa index trong sql


Các hình ảnh về ý nghĩa index trong sql đang được chúng mình Cập nhập. Nếu các bạn mong muốn đóng góp, Hãy gửi mail về hộp thư [email protected] Nếu có bất kỳ đóng góp hay liên hệ. Hãy Mail ngay cho tụi mình nhé

Xem thêm báo cáo về ý nghĩa index trong sql tại WikiPedia

Bạn có thể tìm thông tin chi tiết về ý nghĩa index trong sql từ trang Wikipedia tiếng Việt.◄ Tham Gia Cộng Đồng Tại

💝 Nguồn Tin tại: https://khoalichsu.edu.vn/

💝 Xem Thêm Chủ Đề Liên Quan tại : https://khoalichsu.edu.vn/hoi-dap/

Leave a Reply