Ktl-icon-tai-lieu

tối ưu hóa truy vấn sql

Được đăng lên bởi duyhungds9
Số trang: 1 trang   |   Lượt xem: 412 lần   |   Lượt tải: 0 lần
Execution Plan

Trong trường hợp này, nó phải đọc toàn bộ 19 185 bản ghi và tìm ra bản ghi có CustomerID=11011. Đây là một thao 
tác rất chậm vì nó phải xử lý tất cả các bản ghi trong bảng. Nên nhớ hệ thống sẽ không dừng lại khi nó tìm được bản 
ghi đầu tiên có CustomerID=11011, vì nó không biết liệu còn bản ghi nào khác có giá trị CustomerID tương tự hay 
không, cho nên để chắc chắn trả lại kết quả đầy đủ hệ thống vẫn phải tiếp tục đọc các bản ghi còn lại. Ta có thể 
nhận xét thấy chi phí của thao tác duyệt bảng tăng tuyến tính cùng với số lượng bản ghi trong bảng (độ phức tạp là 
O(n)).
Table scan : quét toàn bộ bảng 
Index seek là khi hệ thống có thể nhảy đến được node trên cây index chứa khóa thỏa mãn yêu cầu tìm kiếm. 
RID là ID của bản ghi tương ứng trong bảng (đây là giá trị nội bộ chỉ dùng bên trong hệ thống, ta không truy cập được 
giá trị này). Vì thế bước tiếp theo là dùng RID này để nhảy đến bản ghi tương ứng trong bảng (RID lookup) để lấy các 
trường dữ liệu cần thiết.
độ phức tạp giảm xuống thành O(logn), một bước tiến vượt bậc so với table scan.
Index đã giúp cho lượng dữ liệu hệ thống cần phải xử lý để tìm ra kết quả giảm xuống đến mức tối thiểu, và điều đó 
đã tạo ra bước nhảy về tốc độ. Từ đây ta rút ra một bài học quan trọng: Các trường thường được dùng trong mệnh 
đề WHERE là các ứng cử viên đầu tiên cần được tạo index.
Trước hết, chúng ta hãy xem lại chỉ số thời gian ngắn. Một chỉ mục trong một cơ sở dữ liệu SQL Server tương tự 
như chỉ số lúc bắt đầu của một cuốn sách. Đó là, chức năng của nó là để cho phép bạn nhanh chóng tìm thấy dữ liệu 
bạn đang tìm kiếm bên trong sách; trong trường hợp của một cơ sở dữ liệu, các "cuốn sách" là một bảng
Một chỉ số quét có nghĩa là SQL Server đọc tất cả các hàng trong một bảng, và sau đó trả về chỉ có những hàng đáp 
ứng các tiêu chí tìm kiếm.

...
Execution Plan
Trong tr ng h p này, nó ph i đ c toàn b 19 185 b n ghi và tìm ra b n ghi có CustomerID=11011. Đây là m t thao ườ
tác r t ch m vì nó ph i x lý t t c các b n ghi trong b ng. Nên nh h th ng s không d ng l i khi nó tìm đ c b n ượ
ghi đ u tiên có CustomerID=11011, vì nó không bi t li u còn b n ghi nào khác có giá tr CustomerID t ng t hay ế ươ
không, cho nên đ ch c ch n tr l i k t qu đ y đ h th ng v n ph i ti p t c đ c các b n ghi còn l i. Ta có th ế ế
nh n xét th y chi phí c a thao tác duy t b ng tăng tuy n tính cùng v i s l ng b n ghi trong b ng (đ ph c t p là ế ượ
O(n)).
Table scan : quét toàn b b ng
Index seek là khi h th ng có th nh y đ n đ c node trên cây index ch a khóa th a mãn yêu c u tìm ki m. ế ượ ế
RID là ID c a b n ghi t ng ng trong b ng (đây là giá tr n i b ch dùng bên trong h th ng, ta không truy c p đ c ươ ư
giá tr này). Vì th b c ti p theo là dùng RID này đ nh y đ n b n ghi t ng ng trong b ng (RID lookup) đ l y các ế ướ ế ế ươ
tr ng d li u c n thi t.ườ ế
đ ph c t p gi m xu ng thành O(logn), m t b c ti n v t b c so v i table scan. ướ ế ượ
Index đã giúp cho l ng d li u h th ng c n ph i x lý đ tìm ra k t qu gi m xu ng đ n m c t i thi u, và đi u đó ượ ế ế
đã t o ra b c nh y v t c đ . T đây ta rút ra m t bài h c quan tr ng: Các tr ng th ng đ c dùng trong m nh ư ườ ư ượ
đ WHERE là các ng c viên đ u tiên c n đ c t o index. ượ
Tr c h t, chúng ta hãy xem l i ch s th i gian ng n.ướ ế M t ch m c trong m t c s d li u SQL Server t ng t ơ ươ
nh ch s lúc b t đ u c a m t cu n sách.ư Đó là, ch c năng c a nó là đ cho phép b n nhanh chóng tìm th y d li u
b n đang tìm ki m bên trong sách; ế trong tr ng h p c a m t c s d li u, các "cu n sách" là m t b ngườ ơ
M t ch s quét có nghĩa là SQL Server đ c t t c các hàng trong m t b ng, và sau đó tr v ch có nh ng hàng đáp
ng các tiêu chí tìm ki m. ế
tối ưu hóa truy vấn sql - Người đăng: duyhungds9
5 Tài liệu rất hay! Được đăng lên bởi - 1 giờ trước Đúng là cái mình đang tìm. Rất hay và bổ ích. Cảm ơn bạn!
1 Vietnamese
tối ưu hóa truy vấn sql 9 10 552