Lập chỉ mục (Index) trong Table - Tăng tốc tìm kiếm và sắp xếp dữ liệu
ongke0711 > 25-03-18, 07:26 PM
Index là gì?
Chắc các bạn đã khá quen thuộc với khái niệm Index trong CSDL (Database) và Ms Access cũng có đặc tính rất hay này là tạo Index trong Table. Tuy nhiên cũng có nhiều bạn còn mơ hồ về nó nên sẵn đây tôi cũng chia sẻ chút ít hiểu biết của tôi về Index để các bạn tham khảo, bạn nào rành về SQL Server thì biết nó rồi.
Nói nhanh vào vấn đề, lập chỉ mục (Index) cho Table giúp bạn sắp xếp và tìm kiếm dữ liệu được nhanh hơn nhưng ngược lại bạn cũng sẽ đánh đổi chi phí cho nó tức là bạn sẽ phải tốn thêm bộ nhớ cho nó.
Index nó lưu vị trí của bản ghi (Record) trong table dựa theo trường (Field) mà bạn chọn làm chỉ mục và nó lưu trong cùng 1 table sử dụng MyISAM engine. Cái bảng lưu chỉ mục này nó chỉ lưu cái Field được indexed và vị trí con trỏ để trỏ đến record đó mà thôi nên dung lượng sẽ ít hơn cái table gốc chứa toàn bộ các Fields. Chính điều này sẽ làm tăng kích thước table nếu có nhiều trường (Fields) của cùng 1 table được chọn làm Index. Nói nôm na, Index giống như là cái mục lục của cuốn sách vậy. Bạn muốn tìm record nào thì Access nó sẽ đối chiếu, tìm vị trí của record đó trong bảng chỉ mục rồi di chuyển ngay tới vị trí đó trong table để lấy dữ liệu, cách này giúp tiết kiệm thời gian tìm kiếm rất nhiều.
Trên đây tôi có nói tới cái MyISAM engine, nó là bộ máy lưu trữ của Access (Storage Engine). Các bạn tự ngâm cứu nó sau nhé.
Index nó ảnh hưởng như thế nào? các trường nào nên lập chỉ mục?
Ví dụ: Khi bạn chạy query cần tìm tất cả thông tin của một người tên “ongke” trong table tblNhanVien.
SELECT * FROM tblNhanVien WHERE HoTen = ‘ongke’
Khi này, trước tiên Access sẽ kiểm tra xem có chỉ mục nào trong bảng tblNhanVien hay không, nếu có chỉ mục nó sẽ dùng chỉ mục này để di chuyển chính xác đến record có HoTen= ‘ongke’ để lấy dữ liệu, nếu không có index Access sẽ quét qua từng dòng đến cho đến hết toàn bộ bảng tblNhanVien để tìm, nó giống như bạn dùng mắt nhìn, tìm từng dòng dữ liệu trong toàn bộ table vậy (full table scan). Một khi Access phải quét toàn bộ table để tìm record mà bạn yêu cầu thì nó sẽ ảnh hưởng đến tài nguyên máy, đến hiệu suất hoạt động đáng kể như thế nào. Khi có Index, thường thì Access sẽ sắp xếp dữ liệu theo trường được indexed trước, sau đó mới quét, nó sẽ giảm thiểu số record, số dòng cần scan qua trong table để việc tìm kiếm được nhanh hơn.
Bạn có thể tạo index dựa trên một hoặc nhiều trường.
- Tạo index trên các trường mà bạn thường xuyên tìm kiếm ví dụ như: Họ tên, số CMND…
- Tạo index trên các field mà bạn dự định sort nó.
- Không nên tạo index trên các trường mà có dữ liệu trùng nhau, lập đi lập lại nhiều lần vì nó sẽ tiêu tốn nhiều thời gian hơn khi lưu dữ liệu ở trường này. Nó không hiệu quả vì thời gian bạn query nhanh hơn không bằng thời gian tiêu tốn khi lưu dữ liệu.
- Bạn không thể tạo index trên các Field dạng OLE, attachment hoặc Calculated field.
- Access tự động tạo Index cho khóa chính của bảng (Primary Key).
Chi phí cho việc dùng Index?
- Tốn không gian bộ nhớ: Table càng lớn thì không gian lưu index càng lớn.
- Giảm hiệu năng của hệ thống: khi bạn Thêm, Xóa, Cập nhật dữ liệu của table được Index thì Access cũng phải xây dựng lại cho bảng chỉ mục. Nó phải Thêm, Xóa, Cập nhật ngay cái Field mà bạn vừa hiệu chỉnh trong bảng chi mục để được đồng bộ.
Túm lại:
Chỉ nên tạo index cho trường nào hường xuyên truy vấn trong table.