[Hỏi]_Tốc độ lấy dữ liệu từ SQL (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

sonlamhpu

Thành viên chính thức
Tham gia
20/8/09
Bài viết
84
Được thích
10
Em chào các anh chị!
Hiện em đang có một vấn đề, mong các anh chị giúp dùm em với
Em có một câu lệnh Query, kết nối tới CSDL SQL để lấy kết quả ra, sau đó đẩy vào mảng, rồi dán vào trong sheet excel
Vấn đề ở đây là, nếu bản ghi ít, thì tốc độ OK, nhưng với dữ liệu bản ghi lớn, thì tốc độ rất chậm
Vậy làm cách nào để tối ưu việc này ạ?

PHP:
mrs.Open SQry, cnn1
Worksheets("STEP3-1").Range("B3").CopyFromRecordset mrs

Em cảm ơn các bác nhiều!
 
Em có một câu lệnh Query, kết nối tới CSDL SQL để lấy kết quả ra, sau đó đẩy vào mảng, rồi dán vào trong sheet excel

PHP:
mrs.Open SQry, cnn1
Worksheets("STEP3-1").Range("B3").CopyFromRecordset mrs

Có thấy chỗ nào đẩy vào mảng đâu?

Vấn đề ở đây là, nếu bản ghi ít, thì tốc độ OK, nhưng với dữ liệu bản ghi lớn, thì tốc độ rất chậm
Vậy làm cách nào để tối ưu việc này ạ?

SQL là cái gì? Hiện tại trên thị trường có ít nhất là 3 loại CSDL có tên SQL: MS SQL Server (của Microsoft), mySQL (của Oracle), và NoSQL (nhiều cty). Mỗi loại có cách tối ưu khác nhau.

Bản ghi ít và bản ghi lớn nghĩa là gì?
Số bản ghi trên CSDL (SQL Server?), hay là số bản ghi mà lệnh truy cập được?. Néu là số bản ghi trên CSDL thì phải biết chi tiết của CSDL và câu SQL mới tối ưu được.
Nếu là số bản ghi truy cập được thì phải biết CSDL nằm ở đâu mới tính chuyện tối ưu băng thông đường kết nối.
 
Upvote 0
1. Có thấy chỗ nào đẩy vào mảng đâu?
Xin lỗi bác, em không viết vào đây, ý em là phần này là lâu nhất, còn khi đẩy dữ liệu từ mrs vào mảng thì nhanh ạ


2. SQL là cái gì? Hiện tại trên thị trường có ít nhất là 3 loại CSDL có tên SQL: MS SQL Server (của Microsoft), mySQL (của Oracle), và NoSQL (nhiều cty). Mỗi loại có cách tối ưu khác nhau.
Em dùng MS SQL Server (của Microsoft).

3. Bản ghi ít và bản ghi lớn nghĩa là gì?
Số bản ghi trên CSDL (SQL Server?), hay là số bản ghi mà lệnh truy cập được?. Néu là số bản ghi trên CSDL thì phải biết chi tiết của CSDL và câu SQL mới tối ưu được.
Nếu là số bản ghi truy cập được thì phải biết CSDL nằm ở đâu mới tính chuyện tối ưu băng thông đường kết nối.
Ý em đây là số lượng dòng ấy ạ, em sử dụng câu lệnh Query
Sau đó get ra tầm 500000 dòng có 11 cột.
Thời gian để đẩy vào mrs khá lâu, tầm 30s

Cảm ơn bác đã giúp đỡ
 
Upvote 0
Bạn thử đo thời gian thực hiện mỗi dòng lệnh ở trên xem. ;;;;;;;;;;;

Mã:
mrs.Open SQry, cnn1
Nếu dòng này chiếm phần lớn thời gian thì bạn nên xem lại SQry.
Mã:
Worksheets("STEP3-1").Range("B3").CopyFromRecordset mrs
Còn nếu dòng này chiếm nhiều thời gian thì khó có cách nào cải thiện -0-/.
 
Lần chỉnh sửa cuối:
Upvote 0
Em chào anh sonlamhpu, em muốn hỏi anh một xíu được không ạ?em cũng có làm việc là lấy dữ liệu từ SQL xuống Sheet, nhưng em toàn phải gán vô Sheet rồi mới đưa vô mảng, anh có thể hướng dẫn em sơ qua làm sao để gán trực tiếp vào mảng để xử lý dữ liệu trước rồi mới đổ xuống Sheet được không?
Cảm ơn anh!
 
Upvote 0
Nói chuyện với bạn đoán mò cực quá.
Với con số dữ kiệu đó, ít nhất bạn phải cho biết CSDL nằm trên cùng máy hay truy cập qua mạng LAN.
500.000 dòng * 11 cột * (trung bình 20 bytes / 1 cột) = 100 Mb
Với đường kết nối bình thường mà SQL Server cho một kết nối thì 30 giây để chuyển ngần ấy dữ liệu đâu phải là lâu.

Nếu dùng SQL Server Management Studio, kết hối thẳng vào và truy xuất thì tốn bao lâu?
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom