Tranh luận: Có nên định kỳ Rebuild Index? — Transcript

Tranh luận về việc có nên định kỳ rebuild index trong SQL, phân tích sâu về hiệu quả và chiến lược sử dụng index.

Key Takeaways

  • Không phải lúc nào rebuild index cũng cải thiện hiệu năng, cần kiểm chứng thực tế.
  • Rà soát và loại bỏ index không sử dụng hoặc trùng lặp giúp tối ưu hệ thống.
  • Hiểu rõ cơ chế hoạt động của B-tree index khi update, delete, insert để đưa ra quyết định chính xác.
  • Chiến lược index phải dựa trên thực tế sử dụng của hệ thống, không nên làm theo thói quen hay niềm tin.
  • Tài liệu và kinh nghiệm thực tế là nguồn tham khảo quan trọng để áp dụng hiệu quả.

Summary

  • Index giúp tăng tốc độ tìm kiếm trong SQL, phổ biến là B-tree index và Bitmap index.
  • Rebuild index được hiểu là tạo lại cây index nhằm cải thiện hiệu năng hệ thống.
  • Nhiều người tin rằng định kỳ rebuild index sẽ giúp hệ thống chạy nhanh hơn nhưng chưa chắc đã đúng.
  • Câu hỏi quan trọng là liệu việc rebuild index có thực sự làm mọi thứ tốt hơn hay không và đã được kiểm chứng chưa.
  • Cần rà soát các index để xác định index nào còn được sử dụng, index nào không dùng hoặc trùng lặp để quyết định drop hoặc giữ.
  • B-tree index có khả năng tái sử dụng không gian sau khi xóa dữ liệu, do đó không phải lúc nào delete cũng làm index kém hiệu quả.
  • Việc có nhiều index trên cùng một cột hoặc các cột liên quan có thể gây thừa thãi và không hiệu quả.
  • Rà soát và đánh giá tổng thể hệ thống index là cần thiết để tối ưu hóa hiệu năng.
  • Tác giả chia sẻ kinh nghiệm thực tế từ nhiều dự án tài chính, chứng khoán, bệnh viện và các tập đoàn lớn.
  • Có tài liệu và bài viết bổ trợ trên trang wecommit.com.vn giúp hiểu sâu hơn về chiến lược thực thi và tối ưu index.

Full Transcript — Download SRT & Markdown

00:12
Speaker A
Trong đây các anh em thì rất nhiều người thì đã biết về index đúng không ạ?
00:16
Speaker A
Ai cũng có từng đọc một cái tài liệu đó thì nói rằng index thì giúp câu lệnh anh em mình tìm kiếm nhanh lên.
00:22
Speaker A
Trong SQL nó có hai có kinh điển là có B-tree index và Bitmap index.
00:31
Speaker A
Thì tại đây tôi chỉ xét những cái cái rất nhiều anh em gặp là B-tree index ấy.
00:36
Speaker A
Thì một số anh em nói với tôi rằng, ok, thì dùng index để nó tìm kiếm nhanh lên đúng không?
00:43
Speaker A
Vậy thì trong những quá trình anh em thực hiện câu lệnh DML ấy là update, đấy, anh em mình dùng ba cái lệnh này thì cái cây index của anh em mình phải cập nhật và anh em nghĩ rằng cái cây index này nó sẽ không hiệu quả nữa.
00:57
Speaker A
Và giống như một quyển sách, anh em nghĩ là à tôi thế thì để cho em tình huống là chúng ta coi rằng tôi nghĩ rằng tôi khi tôi rebuild lại cây index này, thực hiện rebuild tức là tôi tạo lại, đấy, tôi tạo lại cây index này, tôi nghĩ rằng cây index này nó sẽ hiệu quả hơn cho cái hệ thống của tôi, cho câu lệnh của tôi chạy tìm kiếm nó nhanh lên.
01:57
Speaker A
Vậy thì tôi đã từng có những cái yêu cầu khách hàng tôi yêu cầu tôi rằng hệ thống của anh có nên cứ định kỳ một tháng anh chạy rebuild index một phát không, hay là cứ một thời gian nào đó thì tôi sẽ chạy rebuild toàn bộ index một lần không.
02:14
Speaker A
Thì có nhiều anh em lập trình nghĩ thế lắm, anh em có cái niềm tin là cứ tôi rebuild index thì hệ thống tôi sẽ chạy nhanh lên đấy, niềm tin của nhiều người tôi thống kê từ góc nhìn của tôi ở trong các dự án.
02:25
Speaker A
Tại đây thì tôi có mấy thứ tôi muốn anh em có thể đặt câu hỏi và hiểu sâu hơn và đôi khi hiểu ra những cái sai lầm của mình.
02:33
Speaker A
Đặt câu hỏi đầu tiên của anh em ấy, quan trọng đầu tiên này, là lúc nào rebuild lại thì mọi thứ cũng tốt lên là việc đấy là có thật không, điều đấy nó có đúng không, anh em đã kiểm chứng chưa?
03:29
Speaker A
Câu hỏi thứ hai của anh em ấy là cái câu hỏi còn quan trọng hơn cái câu hỏi là có thật không này này, là câu này là câu hỏi thứ hai ít người biết và ít người làm theo góc nhìn của tôi, đó là gì ạ, trong số cái index của anh em mình tạo ra ấy.
03:44
Speaker A
Anh em có xem là có phải có chăng có những cái index mà nó còn chưa bao giờ nó được sử dụng hoặc là trước đây nó được dùng nhé, nhưng mà sau thời gian hoạt động hệ thống nó còn chẳng dùng nó nữa, thế nếu nó không dùng nó thì anh em phải rebuild làm gì, anh em có khi anh em phải drop nó đi chứ, đúng không?
04:00
Speaker A
Có những cái index mà thực tế hệ thống nó chẳng bao giờ nó dùng đến, chúng ta phải rà soát nó ta drop nó đi chứ không phải là câu hỏi là định kỳ ta rebuild, chúng ta bao giờ rà soát lại để ta biết được có index nào nó còn không được sử dụng hay không, đây là hai câu hỏi mà anh em phải có thì chúng ta mới thực sự làm làm việc tối ưu.
04:59
Speaker A
Bây giờ tôi sẽ phân tích sâu hơn một chút ở hai câu hỏi này, ở câu hỏi thật không này.
05:03
Speaker A
Anh em hãy tưởng tượng nhé, câu lệnh delete của anh em thì thì cái cây B-tree của anh em mình đúng không, thì dữ liệu nút lá nó bị xóa đi.
05:11
Speaker A
Thế tôi hỏi anh em một câu là nó vừa ví dụ tôi vừa muốn xóa 100 giá trị có cái ký tự là tên là Huy chẳng hạn, đấy là thông tin cho nốt lá tôi xóa đi 100 Huy, nhưng sau đó tôi lại insert vào 90 ông giá trị là Huy như cũ thì nó có tái sử dụng được không?
05:28
Speaker A
Nếu anh em học về cái cây B-tree index thì nó có tái sử dụng được không, xóa đi 100 rồi tôi lại đổ lại 90 thì nó có dùng được cái dữ liệu bị trống không, hay nó phải cấp phát mới hay làm như thế nào, nếu như anh em không hiểu được việc này ấy thì tại sao anh em khẳng định rằng cứ delete xong thì mọi thứ nó sẽ tệ, vì hệ thống anh em mình ngoài delete thì nó còn insert cơ mà.
05:49
Speaker A
Đúng không ạ, thì trong chương trình từ điển tối ưu 100x hiệu năng của tôi ấy thì tôi cũng dạy chi tiết về cái kiến trúc của B-tree index nó sẽ như thế nào khi bị update, nó thế nào khi bị delete và nó thế nào khi insert, vì hiểu như thế thì chúng ta mới khẳng định được câu hỏi này là có đúng hay không, anh em nhé.
06:47
Speaker A
Ok, về vấn đề thứ hai là vấn đề rà soát.
06:50
Speaker A
Nhiều anh em nghĩ rằng đánh index thì có hiệu quả, thế nhưng mà anh em đã nghe tôi những cái bài tôi phân tích về chiến lược thực thi đúng không, thì nó chỉ hiệu quả khi hệ thống anh em mình sử dụng index đó, còn khi anh em đánh index mà hệ thống không sử dụng thì là vô nghĩa.
07:06
Speaker A
Ngoài ra, ở trong thời gian khi anh em mình phát triển ứng dụng ấy thì chúng ta phải có nhiều index chúng ta được thiết kế.
07:14
Speaker A
Tôi ví dụ với anh em, thời gian đầu chúng ta phát triển chúng ta đánh một cái index trên cột salary, đấy, sau đó vì một lý do đó chúng ta phát triển lên chúng ta đánh đánh là index trên cái cột salary phẩy first name chẳng hạn, tôi ví dụ hai cột đó.
07:29
Speaker A
Thì tôi hỏi anh em, khi chúng ta có cả hai index này thì có phải là một trong hai index này có thể là nó sẽ không còn hiệu quả nữa không, phải chăng có thể hệ thống chỉ cần dùng một index thôi để nó tìm kiếm được.
08:32
Speaker A
Thì chúng ta có nên đánh giá lại rà soát lại tổng thể hệ thống chúng ta không, hệ thống chúng ta có thể hàng trăm index, thì trong số đó có khoảng vài chục phần trăm có index là nó không được sử dụng hoặc sử dụng không hiệu quả.
08:45
Speaker A
Có những index trùng lặp kiểu như thế này, đấy, trùng lặp gì, trùng lặp chữ salary đây này, nếu tôi dùng index đằng sau này, tôi vẫn tìm được cái thông tin của salary bình thường nhé, đúng không ạ, thì anh em mình cần phải có sự rà soát chứ.
08:58
Speaker A
Tôi đã làm trên rất nhiều khách hàng của tôi thì tôi nhận thấy rằng thống kê tôi nhìn thấy là đa số anh em thì không có cái cái cái công việc này, đấy, đấy chính là lý do tại sao anh em mình cần phải hai cái điều này nhé.
09:12
Speaker A
Còn anh em có thể nhìn các dự án tôi làm thì vào trang wecommit vào trang dự án anh em sẽ thấy một loạt danh sách tôi làm từ chứng khoán đến từ những đơn vị tài chính đến bệnh viện đến các tập đoàn thì anh em sẽ hiểu tại sao tôi phải có góc nhìn nó sâu hơn và đặt câu hỏi liên quan đến đây, nếu anh em cần biết thêm những cái demo chi tiết anh em có thể vào cái trang web wecommit.com.vn của tôi để đọc thêm những cái bài viết bổ trợ đấy, thì trong các bài viết bổ trợ đấy thì nó gồm còn cả những thứ liên quan đến chiến lược thực thi của câu lệnh, liên quan những cái thứ liên quan đến tăng tốc những cái câu lệnh về update, về insert, những cái thứ về index về SQL server, về Oracle, về các loại database khác và tôi có chia sẻ tất cả những thứ đấy là đều áp dụng từ những kinh nghiệm dự án chuyển ra và tôi cũng chỉ rõ là trong cái kiến thức nào thì chúng ta có thể xem nhẹ, kiến thức nào là áp dụng vào thực tế là nhiều và có rất nhiều thứ phản biện kiểu như thế này.
Topics:rebuild indexB-tree indexSQL Servertối ưu indexrà soát indexupdate delete inserthiệu năng hệ thốngchiến lược thực thiWecommitTrần Quốc Huy

Frequently Asked Questions

Có nên định kỳ rebuild index trong SQL không?

Không phải lúc nào định kỳ rebuild index cũng giúp cải thiện hiệu năng. Việc này cần được kiểm chứng dựa trên thực tế sử dụng và tình trạng của index.

Tại sao phải rà soát các index trong hệ thống?

Rà soát giúp xác định những index không còn được sử dụng hoặc bị trùng lặp, từ đó có thể drop để tránh lãng phí tài nguyên và tăng hiệu quả hệ thống.

B-tree index có tái sử dụng không gian sau khi xóa dữ liệu không?

Có, B-tree index có khả năng tái sử dụng không gian sau khi xóa dữ liệu, do đó việc delete không nhất thiết làm index kém hiệu quả nếu có insert dữ liệu mới.

Get More with the Söz AI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries, speaker detection, and unlimited transcriptions.

Or transcribe another YouTube video here →