Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

4 posters

Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  ngCTruong 19/2/2009, 11:34

Hi all.
Mình đang có vướng mắc về SQL về thời gian truy xuất dữ liệu.
câu truy vấn của mình có dạng như sau:
select * from (select a1,a2,b2,b3 from table1 as a, table2 as b where a.a1=b.b1) as t1, (select x1,x2,y2,y3 from tablex1 as x, tabley1 as y where x.x1=y.y1) as t2 where t1.a1=t2.x1
nhưng khi truy vấn thì rất chậm, còn nếu từ 2 câu select t1, t2 mình tạo ra 2 bảng tạm và kết lại với nhau tương tự thì nó lại cho kết quả rất nhanh.
Mình đã thử không dùng 2 câu select t1,t2 như trên nữa mà tách rời luôn
select * from table1 as a, table2 as b, tablex1 as x , tabley1 as y where a.a1=b.b1 and x.x1=y.y1 and a.a1=x.x1
cũng cho kết quả rất chậm.
Mà theo mình nghĩ thì khi mình tách thành 2 bảng như trường hợp 1 thì nó phải tối ưu hơn vì nó chọn ra điều kiện trước rồi mới tích đề-các giữa 2 bảng này với nhau vậy thì nhanh hơn nhưng kết quả không được như ý muốn mà còn cảm giác là nó chạy chậm hơn.
Mong các bạn chỉ giúp mình làm sao để có thể tối ưu câu truy vấn trên mà không cần tạo ra 2 table tạm.
Xin chân thành cảm ơn.
ngCTruong
ngCTruong

Tổng số bài gửi : 94
Join date : 18/02/2009
Đến từ : http://www.nuivandon.freevnn.com/

http://www.nuivandon.freevnn.com/

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  ngCTruong 20/2/2009, 21:52

Hi all.
Không biết mình viết vậy mọi người có hiểu không? hay mọi người cũng không biết làm như thế nào để nó chạy nhanh hơn được mà không có ai trả lời cho mình được vậy? Mình đang cần gấp nên mong mọi người nếu biết có thể giúp mình được.
Xin cảm ơn nhiều. Sad Sad
ngCTruong
ngCTruong

Tổng số bài gửi : 94
Join date : 18/02/2009
Đến từ : http://www.nuivandon.freevnn.com/

http://www.nuivandon.freevnn.com/

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Tối ưu SQL

Bài gửi  DVD_duynt 26/2/2009, 10:24

Để SQL chạy nhanh hơn bạn nên "join" các table lại với nhau
hay tối ưu hóa SQL theo quy luật
1. Table nào ít DL hơn để trước , nhiều DL hơn để sau trong trong "From"
2. ĐKiện lọc được nhiều DL nhất để dưới cùng trong "Where"

Đó là cơ bản nhưng còn rất nhiều vấn đề nữa như having , oder by , group by ,distinct .....thì tối ưu kiểu khác
Lần sau soạn đưa lên sau


Chúc bạn thành công !

"Gõ bàn phím bình thiên hạ bounce , lick chuột định giang san "


Được sửa bởi DVD_duynt ngày 27/2/2009, 11:27; sửa lần 1.
DVD_duynt
DVD_duynt

Tổng số bài gửi : 43
Join date : 26/02/2009
Age : 40
Đến từ : HCM

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Quan trong là cách viết

Bài gửi  TuongVi 26/2/2009, 20:19

Chào các bạn!
Thực chất trong SQL server trước khi chạy sẽ tối ưu hóa câu lệnh trước. Tuy nhiên, tốt nhất là bạn tách 2 câu lệnh nhỏ thành bảng tạm trước, sau đó join nó lại. Chú ý, lượng dữ liệu của bạn nhiều hay ít mà tùy chọn cách viết nào cho phù hợp và là cách viết ngắn nhất. Không nhất thiết cứng nhắc trong mọi trường hợp.
Chúc bạn hiểu sâu hơn về SQL.!!!! Sleep flower

TuongVi

Tổng số bài gửi : 30
Join date : 26/02/2009

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re: Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  ngCTruong 27/2/2009, 10:40

DVD_duynt đã viết:Để SQL chạy nhanh hơn bạn nên "join" các table lại với nhau
hay tối ưu hóa SQL theo quy luật
1. Table nào nhiều DL hơn để trước , ít DL hơn để sau trong trong "From"
2. ĐKiện lọc được nhiều DL nhất để dưới cùng trong "Where"

Đó là cơ bản nhưng còn rất nhiều vấn đề nữa như having , oder by , group by ,distinct .....thì tối ưu kiểu khác
Lần sau soạn đưa lên sau

Chào bạn, dữ liệu của bạn muốn lấy lên chính xác thì bạn phải xác định được đâu làm bảng chính để mình cần lấy dữ liệu lên, còn đâu là các bảng để mình sử dụng điều kiện lọc lên, đúng không bạn (đấy là theo mình hiểu) còn như bạn nói thì mình cũng đã join rồi đó thôi nhưng nó vẫn rất chậm. Trong câu truy vấn SQL mình có sử dụng hàm "like '%văn%' nên nó chậm vậy đó. Trong khi mình tạo 2 bảng tạm ra thì nó cho kết quả rất nhanh, nhưng trong lập trình thì mình đâu nhất thiết phải tạo ra cái bảng tạm đó để rồi lại phải xóa đi. Dù sao thì cũng cảm ơn bạn đã giúp đỡ.
Thanks much
ngCTruong
ngCTruong

Tổng số bài gửi : 94
Join date : 18/02/2009
Đến từ : http://www.nuivandon.freevnn.com/

http://www.nuivandon.freevnn.com/

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re: Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  ngCTruong 27/2/2009, 10:47

TuongVi đã viết:Chào các bạn!
Thực chất trong SQL server trước khi chạy sẽ tối ưu hóa câu lệnh trước. Tuy nhiên, tốt nhất là bạn tách 2 câu lệnh nhỏ thành bảng tạm trước, sau đó join nó lại. Chú ý, lượng dữ liệu của bạn nhiều hay ít mà tùy chọn cách viết nào cho phù hợp và là cách viết ngắn nhất. Không nhất thiết cứng nhắc trong mọi trường hợp.
Chúc bạn hiểu sâu hơn về SQL.!!!! Sleep flower

Chào bạn.
Mình lập trình thì tạo ra 2 bảng tạm như bạn nói để làm gì rồi phải xóa đi. Nếu bạn làm vậy thì chương trình của bạn chạy rất chậm vì chiếm quá nhiều bộ nhớ, xử lý nhiều hơn trong khi bạn chỉ cần lấy dữ liệu lên thể hiện cho người sử dụng xem. Như mình được học thì nếu mình chọn trước sau đó mới tích Decac các bảng lại với nhau thì sẽ nhanh hơn nhưng theo mình làm vậy mà vẫn thấy nó chậm hơn nhiều.
ngCTruong
ngCTruong

Tổng số bài gửi : 94
Join date : 18/02/2009
Đến từ : http://www.nuivandon.freevnn.com/

http://www.nuivandon.freevnn.com/

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Tối ưu SQL

Bài gửi  DVD_duynt 27/2/2009, 11:40

Hi NguyenCongTruong

Mình Nghĩ vấn của bạn hiện tại bây giờ nó nằm trong ĐKiện "Where"
làm sao để tối ưu trong "where" bạn đã viết , Bạn thử cái này nữa xem
-- Thay Toán tử "Or" Thành toán tử "In"
-- Nên sử dụng các toán tử thay thế kí tự trong biểu thức sau LIKE hợp lý (Cái này căng à nghe) Rolling Eyes
-- Nên sử dụng Stored Procedure
Nếu rảnh Bạn đặc tả lại câu SQL của bạn rồi quăng lên diễn đàn cho mọi ngừơi mổ xẻ nhé
DVD_duynt
DVD_duynt

Tổng số bài gửi : 43
Join date : 26/02/2009
Age : 40
Đến từ : HCM

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re: Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  ngCTruong 8/3/2009, 12:01

DVD_duynt đã viết:Hi NguyenCongTruong

Mình Nghĩ vấn của bạn hiện tại bây giờ nó nằm trong ĐKiện "Where"
làm sao để tối ưu trong "where" bạn đã viết , Bạn thử cái này nữa xem
-- Thay Toán tử "Or" Thành toán tử "In"
-- Nên sử dụng các toán tử thay thế kí tự trong biểu thức sau LIKE hợp lý (Cái này căng à nghe) Rolling Eyes
-- Nên sử dụng Stored Procedure
Nếu rảnh Bạn đặc tả lại câu SQL của bạn rồi quăng lên diễn đàn cho mọi ngừơi mổ xẻ nhé

Chào bạn.
Mình chưa hiểu ý của bạn về đặc tả lại câu SQL nếu đó là câu truy vấn của mình thì khi mình đưa các table lên sợ bạn đọc không hiểu ý nghĩa của table đó. Hay là đưa toàn bộ dữ liệu của nó lên để xem tốc độ xử lý của 2 cách truy vấn trên.
Thân chào
ngCTruong
ngCTruong

Tổng số bài gửi : 94
Join date : 18/02/2009
Đến từ : http://www.nuivandon.freevnn.com/

http://www.nuivandon.freevnn.com/

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Tối ưu SQL

Bài gửi  TuongVi 2/4/2009, 11:34

Bạn cứ đưa lên đi , mình thảo luận trên giấy mà . đưa lên cho anh em học hỏi cách viết của bạn cũng đc , biết đâu hiện tại nó là top1 thì sao .
Idea

TuongVi

Tổng số bài gửi : 30
Join date : 26/02/2009

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re : tối ưu SQL

Bài gửi  DVD_duynt 2/4/2009, 11:41

Mình thống nhất với "TuongVi"
bạn đưa lên anh em mổ thử coi , học tập lẫn nhau là chính mà , chủ yếu là mình coi bạn kết các table như thế nào thôi .
khi post lên bạn có thể post theo lần lượt các table nào nhiều DL hơn để trước nha bạn .

Thân chào .
DVD_duynt
DVD_duynt

Tổng số bài gửi : 43
Join date : 26/02/2009
Age : 40
Đến từ : HCM

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re: Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  minhpt4 13/4/2009, 11:06

DVD_duynt đã viết:Hi NguyenCongTruong

Mình Nghĩ vấn của bạn hiện tại bây giờ nó nằm trong ĐKiện "Where"
làm sao để tối ưu trong "where" bạn đã viết , Bạn thử cái này nữa xem
-- Thay Toán tử "Or" Thành toán tử "In"
-- Nên sử dụng các toán tử thay thế kí tự trong biểu thức sau LIKE hợp lý (Cái này căng à nghe) Rolling Eyes
-- Nên sử dụng Stored Procedure
Nếu rảnh Bạn đặc tả lại câu SQL của bạn rồi quăng lên diễn đàn cho mọi ngừơi mổ xẻ nhé

Bạn sử dụng câu lệnh truy vấn lồng nhau thì hiệu xuất của SQL sẽ nhanh hơn. Đây chỉ là gợi ý để bạn có cơ sở để viết cho tối ưu hơn. Phép kết mà sử dụng nhiều sẽ làm hiệu xuất chậm lại. Hiện tại mình gợi ý với bạn như vậy thôi. Hôm nào mình sẽ đưa ví dụ cụ thể để bạn hiểu thêm.

minhpt4

Tổng số bài gửi : 53
Join date : 13/04/2009

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re: Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  ngCTruong 13/4/2009, 15:37

Do dữ liệu để ở nhiều bảng khác nhau nên phải dùng nhiều phép kết, còn theo bạn nói sử dụng câu truy vấn lồng thì khác gì bạn kết dữ liệu như thế. Vấn đề của mình đây là ở phép toán LIKE nó làm ảnh hưởng đến tốc độ truy vấn của mình. Mình biết như thế nhưng chưa biết được cách khắc phục. Mong bạn nào đó biết cách khắc phục vấn đề này chỉ cho mình với.
Thanks much.
ngCTruong
ngCTruong

Tổng số bài gửi : 94
Join date : 18/02/2009
Đến từ : http://www.nuivandon.freevnn.com/

http://www.nuivandon.freevnn.com/

Về Đầu Trang Go down

Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất? Empty Re: Làm thế nào để truy xuất CSDL bằng SQL để có kết quả nhanh nhất?

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết