PDA

View Full Version : cách lọc dữ liệu nhanh nhất trong Access



Lê Vân
23-12-2004, 22:31
Xin các cao thủ chỉ giúp đoạn code VBA để tìm và lọc nhanh nhất record ứng với điều kiện cho trước
Hiện tại mình dùng hàm Filter của recordset để lọc nhưng rất chậm,CSDL của mình có đến hơn 400.000 record,máy mình P4 làm thì không sao nhưng đem qua máy khác yếu hơn chạy thì treo luôn
Công việc rất cần thiết mong các bạn chỉ giúp,Thanks!!!

nguyenthu
24-12-2004, 17:43
Ðối với CSDL lớn, bạn hãy bỏ qua những máy nhỏ đi .
Ngoài ra, tùy theo cách lọc, thí dụ mã số hay thường lọc, bạn hãy tạo một Index cho nó .
Ngoài ra có nhiều thủ thuật khác : tránh các phép toán trong câu SQL, tránh dùng quá nhiêu Join, tạo virtual disk riêng cho CSDL...
Ðây là cả một môn học, không thể nói ngắn gọn trong một bài được .

phatnq2003
26-12-2004, 11:00
Xin các cao thủ chỉ giúp đoạn code VBA để tìm và lọc nhanh nhất record ứng với điều kiện cho trước
Hiện tại mình dùng hàm Filter của recordset để lọc nhưng rất chậm,CSDL của mình có đến hơn 400.000 record,máy mình P4 làm thì không sao nhưng đem qua máy khác yếu hơn chạy thì treo luôn
Công việc rất cần thiết mong các bạn chỉ giúp,Thanks!!!

Bạn hãy làm thử như sau:

- Trong thủ tục Form_Open, bạn định lại RecordSource của Form:
RecordSource = "SELECT ...." '
Reqrery

- Hoặc chỗ nào bạn cần lọc lại dữ liệu, bạn cũng dùng như trên.

- Nếu bạn mở recordset để sử dụng thì bạn nên mở như thế này:

Set rs = CurrentDB.OpenRecordset("SELECT ....", dbOpenDynaset(hoặc dbOpenSnapshot)

Trong đó câu lệnh SELECT không nên dùng dấu * (lấy hết field) mà nên ghi rõ tên field cần lấy. Trong câu lệnh SELECT chứa mệnh đề WHERE để nhận điều kiện.

:)

Lê Vân
06-01-2005, 19:15
thanks phatnq2003
mình nghĩ không phải tại có nhiều field mà do số lượng record quá nhiều,mình đã thử bỏ hết những field không quan trọng,kết quả là file nhẹ hản đi nhưng việc lọc vẫn ì ạch
Các bạn còn cách nào khả thi nữa không,số record của mình tương lai còn lớn hơn nữa

enemykill
21-01-2005, 06:54
Hi bạn,

Theo tôi 400.000 record là quá lớn dùng msaccess sẽ bị hạn chế rất nhiều. Nên chuyển sang sqlserver chăng.

Bạn có thể lập và nhiều table giống nhau vào tạo một form quản lý table, có thế mua sách dumie ở trường đại học tông hợp tphcm. Như vậy bạn sẽ biết khu vục nào sẽ search và gắn table để search.

Theo kinh nghiệm của tôi nếu search có điều kiện chắc chắc sẽ chậm với số lượng record lớn như vậy. Vả lại bạn có tính tới yếu tố tổng số bao nhiêu record sẽ trả về.

Tôi đang dùng SAP application khá lớn của Mỹ (Mô hình client and server [ Oracle], tôi thấy nó để như vậy đó.

Một chút ý kiến nhỏ nhoi.

Sát thủ

phatnq2003
28-01-2005, 13:05
thanks phatnq2003
mình nghĩ không phải tại có nhiều field mà do số lượng record quá nhiều,mình đã thử bỏ hết những field không quan trọng,kết quả là file nhẹ hản đi nhưng việc lọc vẫn ì ạch
Các bạn còn cách nào khả thi nữa không,số record của mình tương lai còn lớn hơn nữa

Vấn đề không phải hoàn toàn như vậy, mà là bạn Lê Vân đang dùng thuộc tính Filter của Access. Thuộc tính này làm cho việc lọc của bạn rất chậm. Bạn thử hình dung, người ta đổ về cho bạn một đống hàng, bạn phải cất công lựa lại cái bạn cần, hàng càng nhiều, thời gian lựa càng nhiều. Nếu bạn gửi yêu cầu cho người gửi những cái gì bạn cần, vậy khi hàng về bạn có tốn nhiều thời gian nữa không?

Do đó tôi mới đề xuất bạn sử dụng SELECT ... là như vậy.

Thân chào

roro
30-06-2006, 08:48
Cách của phatnq2003 là tối ưu.