Nhờ tạo code xóa những dòng trùng nhau

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
276
Được thích
258
Điểm
710
@ongke0711:
Ở đây chỉ lọc trùng chứ không cần tổng cho nên có thể Group nhiều trường có function làm cho bạn bị chậm.
Bạn thử cải tiến bằng Select Distinct/DistinctRow xem sao?

Chú: một lựa chọn nữa là dùng Union
Select f1, f2, f3 From bang1
Union
(Select f1, f2, f3 From bang1 where 1=0)
Cái subquery chỉ là cái bù nhìn, trả về 0 dòng. Mục đích là lợi dụng Union để lọc duy nhất.
Em đã thử cái Distinct (không dùng DistinctRow) và tốc độ cũng không cải thiện gì mấy. Sở dĩ Em dùng Total query là vì muốn dùng các hàm First, Last của nó để lấy chính xác theo giây dòng IN sớm nhất và dòng OUT trễ nhất nhưng...giờ nghĩ lại mới thấy là không cần như vậy vì nó không có ý nghĩa gì trong trường hợp này. Dùng Distinct là gọn nhất.
Có test cái Union query và tốc độ cũng không đáng kể. :)
 

ThangCuAnh

Thành viên tiêu biểu
Tham gia ngày
1 Tháng mười hai 2017
Bài viết
504
Được thích
382
Điểm
235
Nơi ở
Phờ lây cu
Code mình còn có thể optimize xuống 1/3 nữa, bỏ 2 hàm sort và removeduplicates của excel.
Tốn memory 1 chút. Add từng dòng của arrLines vào 1 dictionary, làm key. Dictionary sẽ remove duplicates và sort giúp ta.
 

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
276
Được thích
258
Điểm
710
Code mình còn có thể optimize xuống 1/3 nữa, bỏ 2 hàm sort và removeduplicates của excel.
Tốn memory 1 chút. Add từng dòng của arrLines vào 1 dictionary, làm key. Dictionary sẽ remove duplicates và sort giúp ta.
Trước giờ tôi cứ nghĩ việc xử lý từng dòng sẽ làm chậm đi giống như vòng lặp vậy đó chứ. :)
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,625
Được thích
7,719
Điểm
560
Trước giờ tôi cứ nghĩ việc xử lý từng dòng sẽ làm chậm đi giống như vòng lặp vậy đó chứ. :)
Bên trong ACE/JET cũng phải dùng vòng lặp để lượt từng dòng.
Tự căn bản, CSDL LH đã là chậm. Access xử lý bảng tính cũng như một bảng text, không có index nên khó thể hiệu quả. Nếu chúng là một bảng trong Access hay SQL Server gì đó thì người ta còn hy vọng thêm index, chẻ partition,... để cải tiến.

Mặt khác, nếu nói về tốc độ thì lúc đo, quý vị đo từ đâu đến đâu? ADO phải gánh thêm cái nặng kết nối. Và tuỳ theo phiên bản, kết nối với file khác sẽ nặng hơn hay nhẹ hơn file chạy code.
Muốn đo thực tốc độ của truy vấn thì phải đo sau khi đã kết nối.
 

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
276
Được thích
258
Điểm
710
Bên trong ACE/JET cũng phải dùng vòng lặp để lượt từng dòng.
Tự căn bản, CSDL LH đã là chậm. Access xử lý bảng tính cũng như một bảng text, không có index nên khó thể hiệu quả. Nếu chúng là một bảng trong Access hay SQL Server gì đó thì người ta còn hy vọng thêm index, chẻ partition,... để cải tiến.

Mặt khác, nếu nói về tốc độ thì lúc đo, quý vị đo từ đâu đến đâu? ADO phải gánh thêm cái nặng kết nối. Và tuỳ theo phiên bản, kết nối với file khác sẽ nặng hơn hay nhẹ hơn file chạy code.
Muốn đo thực tốc độ của truy vấn thì phải đo sau khi đã kết nối.
Đúng đó anh. Khi chạy query này trong Access thì thời gian xử lý cũng nhanh tương tự file v3 của bạn CuAnh. Bởi vậy nên chọn công cụ nào phù hợp với nền tảng đang phát triển mới phát huy được thế mạnh của nó.
 

ThangCuAnh

Thành viên tiêu biểu
Tham gia ngày
1 Tháng mười hai 2017
Bài viết
504
Được thích
382
Điểm
235
Nơi ở
Phờ lây cu
Theo sau vụ LON thì tới nick mình cũng nhạy cảm, vi phạm thuần phong mĩ tục, cấm nuôn ;)
2 admin: có cách nào đổi nick không bác ?

Trong file 222.txt của bạn MinhKhai, có vài dị dạng format, như NameNV là số, lâu lâu xuất hiện i thường, o thường.
Mình phải fix lại chút nếu không thì remove duplicates chạy sai.
Code ADO, SQL của ông kẹ có bypass được trường hợp đó không ?

Mình mới update file testfile.csv và upload lại file. Code của bạn ongke ra kết quả hơn code mình đúng 1 dòng. Tìm chưa ra tại sao !
 
Lần chỉnh sửa cuối:

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
718
Được thích
498
Điểm
735
Xong rồi, đang đợi chủ thớt up file txt bự nhất lên để test. Sau khi sort và remove duplicate thì code mình chạy = 1/3 - 1/4 code bạn.
Code bạn ongke có lỗi, khi có lỗi xảy ra, nó cứ xóa mất tiêu cái header, làm phải gõ lại hoài.
Các bạn test lại giùm, cũng chưa ưng ý lắm và chắc còn lỗi.
Code của anh chạy nhanh thật.
Do không biết sửa Code để chạy trong Office x64 nên em phải cài lại Windows và Office để test.
Sử dụng Office x86 cũng có 1 số bất tiện. Bác xem có thể cài code chạy được cả Office x86 và Office x64 không ?
 

ThangCuAnh

Thành viên tiêu biểu
Tham gia ngày
1 Tháng mười hai 2017
Bài viết
504
Được thích
382
Điểm
235
Nơi ở
Phờ lây cu
Xin phép ông kẹ nhé, tui úp lại file cho bạn Minh Khai, chỉ dùng phần import txt, nên mấy code về ADO, API Browse file và CSV, tui remove hết.
Bạn Minh Khai down lại nhen, về thêm mắm thêm muối đúng theo yêu cầu của bạn.
Siêng thiệt chứ, có chút xíu đó mà phải cài lại Windows với Office. Quá nể ;)
Sao các bác cứ đụng 1 chút là cài lại Windows, Office thế nhỉ ? Lạ...
 

File đính kèm

ongke0711

Thành viên thường trực
Tham gia ngày
7 Tháng chín 2006
Bài viết
276
Được thích
258
Điểm
710
Xin phép ông kẹ nhé, tui úp lại file cho bạn Minh Khai, chỉ dùng phần import txt, nên mấy code về ADO, API Browse file và CSV, tui remove hết.
Bạn Minh Khai down lại nhen, về thêm mắm thêm muối đúng theo yêu cầu của bạn.
Siêng thiệt chứ, có chút xíu đó mà phải cài lại Windows với Office. Quá nể ;)
Sao các bác cứ đụng 1 chút là cài lại Windows, Office thế nhỉ ? Lạ...
Bác cứ xoá thoải mái. Chủ yếu là trao đổi các cách để ra cái cách tối ưu nhất thôi. Tôi còn phải học hỏi bác CuAnh nhiều.
 
Top