1. Trang chủ
  2. » Công Nghệ Thông Tin

Phương pháp tối ưu hóa trong hệ CSDL Oracle

32 1,3K 23
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 164,04 KB

Nội dung

Chơng III Phơng pháp tối u hoá trong Hệ CSDL Oracle A. Các khái niệm cần biết để tối u hoá Phần này sẽ đa ra một số khái niệm đợc sử dụng quá trình tối u hoá. Qui ớc rằng tên các bảng cũng nh các thuộc tính trong các ví dụ minh hoạ sẽ viết tiếng Việt cho cho dễ hiểu nh- ng trong thực tế phải bỏ các dấu tiếng Việt đi bởi vì Oracle cha hỗ trợ triệt để cho ngôn ngữ Việt. 1. Khái niệm về tối u hoá Nói chung các ngôn ngữ bậc cao (trong đó có ngôn ngữ SQL) đòi hỏi thực hiện trong máy đều rất tốn kém thời gian. Đặc biệt là khi dữ liệu nhiều lên thì thời gian thực hiện các câu lên sẽ tăng theo hệ số nhân, do đó cần thiết phải biến đổi các câu hỏi cho hợp lý để giảm thời gian tính toán. Vậy có thể định nghĩa khái niệm tối u hoá nh sau: Tối u hoá (optimization) câu lệnh SQL là một quá trình để tạo điều kiện cho câu lệnh SQL đa ra kết quả đạt hiệu quả cao nhất hiểu theo nghĩa thời gian đáp ứng và sử dụng tài nguyên hệ thống là nhỏ nhất. Theo định nghĩa này thì việc tối u hoá câu lệnh SQL không đơn thuần là tối u mã câu lệnh mà còn có thể thay câu lệnh SQL bằng câu lệnh SQL khác cho ra cùng kết quả nhng thực hiện hiệu quả hơn, điều chỉnh các tham số hệ thống để tài nguyên dành cho câu lệnh là hợp lý nhất, thay đổi các thực thể và quan hệ giữa các thực thể cho câu lệnh thực hiện nhanh hơn. Chú ý rằng việc tối u hoá không nhất thiết phải đúng là tối u trên mọi khả năng có thể của các cách cài đặt các câu hỏi bởi vì nếu sử dụng tài nguyên càng nhiều thì câu lệnh càng có khả năng thực hiện nhanh tuy nhiên sẽ giảm số khối lệnh đợc xử lý đồng thời và ngợc lại. Trong thực tế thì quá trình tối u hoá phải tiến hành thờng xuyên trong mọi khâu sản xuất phần mềm để sản phẩm ngày càng đợc hoàn thiện hơn, điều này cũng là một trong các lý do ra đời các phiên bản Version 1.0, Version 2.0 . của phần mềm. 2. Chiến lợc tối u trên các trên các biểu thức quan hệ Ullman J.D trong các kết quả nghiên cứu công bố lần đầu tiên của mình đã trình bày 6 chiến l ợc tổng quan cho việc tối u hoá. Các chiến lợc này sẽ đợc thể hiện trực tiếp hay gián tiếp trong các bớc tối u cụ thể trong Oracle. Nội dung của các chiến lợc đó nh sau: 2.1. Thực hiện phép chọn càng sớm càng tốt Biến đổi câu hỏi để đa phép chọn vào thực hiện trớc nhằm làm bớt kích cỡ của kết quả trung gian và do vậy chi phí phải trả giá cho việc truy nhập bộ nhớ thứ cấp cũng nh lu trữ của bộ nhớ chính sẽ nhỏ đi. 2.2. Tổ hợp những phép chọn (xác định với tích Đề-các) thành phép kết nối Nh đã biết, phép kết nối, đặc biệt là phép kết nối bằng có thể thực hiện đợc rẻ hơn là thực hiện phép tích Đề- các trên cùng các quan hệ. Nếu kết quả của Đề-các R x S là đối số của phép chọn và phép chọn liên quan tới các phép so sánh giữa các thuộc tính của R và S thì rõ ràng phép tích Đề-các là phép kết nối. 2.3. Tổ hợp dãy các phép tính một ngôi nh các phép chọn và phép chiếu Một dãy các phép một ngôi nh phép chọn hoặc phép chiếu mà kết quả của chúng phụ thuộc và các bộ của một quan hệ độc lập thì có thể nhóm các phép đó lại. 2.4. Tìm các biểu thức con chung trong một biểu thức Nếu kết quả của một biểu thức con chung (biểu thức xuất hiện hơn một lần) là một quan hệ không lớn và nó có thể đợc đọc từ bộ nhớ thứ cấp với ít thời gian thì nên tính toán trớc biểu thức đó chỉ một lần. Biểu thức con chung có lên quan tới một phép kết nối thì trong trờng hợp tổng quát không thể đợc thay đổi nhờ việc đẩy phép chọn vào trong. Điều đáng quan tâm hơn là các biểu thức con chung có tần số xuất hiện lớn đợc biểu diễn trong các View (khung nhìn) của các ngời dùng vì để thực hiện các câu hỏi đó cần thay thế một biểu thức cố định vào cho View. 2.5. Xử lý các tệp trớc Có hai vấn đề cần xử lý trớc quan trọng cho các tệp số là sắp xếp trớc các tệp và thiết lập các tệp chỉ số. Và nh vậy khi thực hiện các phép tính có liên quan tới hai tệp (phép tính hai ngôi) sẽ nhanh hơn rất nhiều. 2.6. Đánh giá trớc khi thực hiện tính toán Một khi cần chọn trình tự thực hiện các phép tính trong biểu thức hoặc chọn một trong hai đối số của một phép tính hai ngôi cần tính toán xem chi phí thực hiện các phép tính đó (thờng là số phép tính, thời gian, kích thớc bộ nhớ theo một tỷ lệ giữa kích cỡ các quan hệ .). Từ đó sẽ có đợc các chi phí (giá thành) phải trả cho các cách khác nhau để thực hiện các câu hỏi. 3. Các kiểu phân lớp trong CSDL Oracle Một trong các thông tin quan trọng khi tối u hoá là chọn cách truy nhập dữ liệu dựa trên đặc điểm lu trữ. Thông thờng khi truy xuất tới một hàng của bảng phải duyệt tuần tự từ đầu của bảng cho tới hàng cần truy xuất. Tuy nhiên mỗi hàng của các bảng trong Oracle đều chứa một địa chỉ của nó gọi là ROWID. Cách truy xuất tuần tự rất chậm khi dữ liệu lớn và cần tìm cách truy xuất trực tiếp tới hàng thông qua ROWID. Do vậy trong Oracle thì dữ liệu đợc lu trữ theo các dạng phân lớp và khi cần truy xuất tới hàng thì tìm ROWID tơng ứng ở các phân lớp và truy xuất tới hàng thông qua ROWID tìm đợc: 3.1. Phân lớp dựa vào Index Khi mà các bảng đợc Index thì cùng với giá trị của trờng Index còn có các ROWID. Tuỳ theo giá trị của cột Index có là khoá duy nhất hay không thì tơng ứng với một khoá của Index có thể có một hoặc có nhiều ROWID. Với một giá trị khoá Index thì sẽ nhận đợc ROWID tơng ứng và ROWID sẽ đợc dùng tìm ra hàng đợc yêu cầu trong một nhóm các hàng có cùng giá trị khoá Index. Thông thờng các Index trong Oracle đợc tạo theo dạng B-tree tuy nhiên Oracle còn cung cấp một mức Index khác gọi là Bitmap Index. Kiểu Index mới mà đặc biệt hiệu quả với những cột mà số lợng nhiều nhng tập giá trị lại ít ví dụ nh cột giới tính, cột mã khu vực chẳng hạn. Bằng việc ánh xạ vị trí các cột với các bit sẽ dễ dàng nhận đợc kết cần tìm. Ví dụ sau sẽ minh hoạ điều này. Giả sử có bảng SinhViên có các thuộc tính MãSinhViên, GiớiTính, KhuVực có các giá trị nh sau: MãSinhViên GiớiTính KhuVực 101 Nữ KV1 102 Nam KV2 103 Nam KV3 104 Nữ KV3 105 Nam KV2 106 Nam KV2 Khi thực hiện phép Index với cột KhuVực sẽ thu đợc bảng sau: KhuVực=KV1 KhuVực=KV2 KhuVực=KV3 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 1 0 Trong bảng Index thì mỗi cột ứng với một đề mục trong cột Index, ví dụ cột KhuVực=KV1 thì giá trị 1 ứng với hàng của Bảng SinhViên có KhuVực=KV1, ngợc lại là giá trị 0. Giả sử để lấy ra mọi thuộc tính của bảng sinh viên với điều kiện sinh viên là nữ ở khu vực KV2 và KV3 với câu lệnh: SELECT * FROM SinhViên WHERE GiớiTính=Nữ AND KhuVực IN (KV2, KV3); Bằng việc sử dụng Bitmap Index và truy nhập trên bảng Bitmap để lọc ra tập hợp các hàng thoả mãn điều kiện đã nêu, quá trình đó đợc mô tả nh bảng dới đây: GiớiTính = Nữ KhuVực = KV2 KhuVực = KV3 0 1 1 AND ( 0 0 1 0 1 0 OR 0 1 1 0 0 1 ) = 1 0 0 0 1 1 AND 0 0 1 0 1 1 = 1 1 1 0 1 1 0 0 1 3.2. Phân lớp bằng Cluster Cluster là một cách thức lu trữ dữ liệu của các bảng trong Oracle thành một nhóm và giữa các bảng này thờng có một số cột là khoá ngoài tham chiếu tới nhau. Ví dụ nh bảng NhânViên và bảng Phòng sẽ có chung một cột là MãPhòng. Khi nhóm bảng NhânViên và bảng Phòng thì Oracle sẽ chứa tất cả các hàng tơng ứng với một phòng ban của cả hai bảng vào trong cùng một khối dữ liệu. Cluster Key (M Phòng)ã 10 TênPhòng TP . Bán hàng TP HCM . M NhânViênã TênNhânViên . 1000 SMITH . 1321 JONES . 1841 WARD . 20 TênPhòng TP . Quản trị TP Hà Nội . M NhânViênã TênNhânViên . 932 KEHR . 1139 WILSON . 1277 NORMAN . Bảng NhânViên M NhânViênã TênNhânViên M Phòngã . 932 KEHR 20 . 1000 SMITH 10 1139 WILSON 20 . 1277 NORMAN 20 . 1321 JONES 10 . 1841 WARD 10 . Bảng được Cluster Các dữ liệu quan hệ được đặt cạnh nhau tạo hiệu quả hơn Bảng không Cluster Các dữ liệu quan hệ được đặt từng phần, cần nhiều chỗ hơn Bảng Phòng M Phòngã TênPhòng TP . 10 Bán hàng TP HCM 20 Quản trị TP Hà Nội Do Cluster chứa các hàng của các bảng có liên hệ với nhau nên có hai u điểm sau: 1* Thời gian đọc đĩa đợc cải thiện cho câu lệnh kết nối của các bảng trong Cluster bởi vì cấu trúc của Cluster đã chứa sẵn một mối liên kết giữa các bảng. 2* Trong một Cluster thì mỗi giá trị khoá Cluster cũng là một thành phần của các hàng và duy nhất chỉ có một giá trị đ - ợc lu trữ cho một khối của Cluster thay mỗi hàng phải chứa giá trị đó. Điều này sẽ tiết kiệm đợc không gian lu trữ trên đĩa. Để sử dụng đợc Cluster thì cần phải tạo ra Index cho Cluster gọi là chỉ mục phân lớp. Khác với chỉ mục thông thờng, loại chỉ mục này có các đặc điểm sau 3* Khoá cho các giá trị NULL có chung một đề mục trong chỉ mục phân lớp. 4* Mỗi đề mục trong chỉ mục phân lớp sẽ chỉ đến hàng đầu tiên của khối dữ liệu trong Cluster. 5* Dữ liệu của bảng đợc lu trữ trong Cluster chỉ đợc truy nhập nếu có chỉ mục phân lớp. 3.3. Phân lớp dựa vào khoá của hàm băm Phân lớp bằng hàm băm (Hash Function) là một cách thức lu trữ dữ liệu theo khoá băm để tối u quá trình truy xuất dữ liệu. Thông qua một hàm băm thì mỗi hàng có một giá trị khoá băm và các hàng có khoá băm trùng nhau sẽ đợc nằm trong cùng một lớp. Để truy nhập đến hàng trớc tiên cần sử dụng hàm băm để tìm ra khoá hàm băm của hàng. Sau đó truy nhập đến bảng băm thông qua khoá hàng băm và lấy ra đ ợc ROWID để truy nhập trực tiếp đến hàng. 3.4. Không phân lớp Nghĩa là dữ liệu đợc ghi tự nhiên nh lúc tạo do vậy việc truy nhập thông tin luôn đòi hỏi phải dùng duyệt toàn bộ bảng. 4. Các kiểu kết nối trong Oracle Do việc đảm bảo tính chuẩn hoá của dữ liệu mà các bảng sẽ đợc kết nối với nhau thông qua các khoá. Một trong các bớc tối u hoá là lựa chọn kiểu kết nối thích hợp. Trong Oracle có các kiểu kết nối sau: 4.1. Kết nối bằng Nested-Loop Để thực hiện một kết nối theo kiểu Nested-Loop, Oracle sẽ chọn ra một bảng nh là bảng ngoài hay là bảng dẫn dắt (outer table hoặc driving table), bảng còn lại đợc gọi là bảng nội (inner table). Với mỗi hàng trong bảng ngoài thì Oracle sẽ tìm tất cả các hàng trong bảng nội thoả mãn điều kiện kết nối. Cặp hàng thoả mãn điều kiện kết nối sẽ đ ợc hợp lại thành một và thêm vào tập các hàng kết quả. Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã nesloop NhânViên (Full) Phòng (RowId) pk_phong (Range Scan) 4.2. Kết nối bằng sắp xếp trộn Điều kiện có thể áp dụng đợc phơng pháp kết nối này là hai nguồn dữ liệu phải kết nối theo kiểu bằng chứ không thể là kiểu kết nối khác. Oracle sẽ tiến hành sắp xếp mỗi nguồn dữ liệu theo cột đợc sử dụng trong điều kiện kết nối nếu nh nguồn dữ liệu cha đợc sắp xếp bởi thao tác trớc đó. Oracle sẽ trộn hai nguồn dữ liệu bằng cách chọn ra các cặp hàng thoả mãn điều kiện kết nối và đa chúng vào tập các hàng kết quả. Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã merge join sort (join) sort (join) Phòng (full) NhânViên (full) 4.3.Kết nối bằng Cluster Oracle có thể thực hiện việc kết nối phân lớp với kết nối bằng mà giữa hai cột bảng nằm trong cùng một phân lớp. Trong một phân lớp thì các hàng từ hai bảng có cùng khoá phân lớp sẽ đợc nằm trong cùng một khối, do đó Oracle chỉ truy nhập đến các khối này. Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã nested loop Phòng (full) NhânViên (cluster) 4.3. Kết bằng sử dụng hàm băm Oracle sẽ duyệt toàn bộ các bảng và chia (băm) chúng ra thành nhiều đoạn dựa vào bộ nhớ có sẵn. Oracle xây dựng một bảng băm từ các đoạn này (nếu có thể Oracle sẽ chọn một đoạn đặt vừa vùng bộ nhớ có sẵn). Oracle sẽ sử dụng các đoạn tơng ứng trong một bảng khác để khảo sát bảng băm. Các đoạn khác mà không nằm vừa trong bộ nhớ sẽ đợc đặt trên đĩa. Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã hash join Phòng (full) NhânViên (cluster) 5. Các phơng thức truy nhập dữ liệu Phơng thức truy nhập dữ liệu (Acces Path) là cách thức truy nhập tới một hàng của bảng. Dới đây là bảng các phơng thức truy nhập sắp xếp theo độ u tiên cao đến thấp. thứ tự Cách truy nhập 1 Chọn một hàng bằng ROWID 2 Chọn một hàng bằng Cluster kết nối 3 Chọn một hàng bằng hàm băm với khoá duy nhất hay khoá chính 4 Chọn một hàng bằng khoá duy nhất hay khoá chính 5 Dùng Cluster kết nối 6 Dùng khoá của hàm băm 7 Dùng khoá Index 8 Kết hợp các khoá 9 Index các cột đơn 10 Giới hạn vùng tìm trên cột đã Index 11 Không giới hạn vùng tìm trên cột đã Index 12 Sắp xếp kết nối bằng phơng pháp trộn 13 MAX hoặc MIN của cột đã Index 14 ORDER BY trên các cột Index 15 Duyệt toàn bộ (Full Table Scan) Oracle chỉ có thể chọn một thành phần truy nhập trong bảng đã liệt kê cho một bảng nếu câu lệnh chứa mệnh đề điều kiện FROM hoặc những cấu trúc khác làm cho các cách truy nhập trở thành có thể dùng đợc. 5.1. Truy nhập qua ROWID ROWID là địa chỉ của một hàng của table trên đĩa. Thông qua ROWID có thể truy nhập trực tiếp đến hàng đó và đây là cách truy nhập thông tin nhanh nhất tới hàng. Phơng pháp này đợc sử dụng khi trong mệnh đề FROM có chứa ROWID hoặc là hàng hiện tại của biến tập hợp (CURRENT OF CURSOR). Ví dụ: SELECT * FROM NhânViên WHERE ROWID = 000000DC5.0000.0001; 5.2. Chọn một hàng bằng Cluster kết nối Khi Index trên trờng không duy nhất giá trị thì nhóm các hàng có cùng giá trị khoá sẽ có ROWID chứa trong cùng một Cluster Index. Bằng cách tìm ROWID trong Cluster Index Oracle sẽ truy nhập thông tin tới hàng một cách trực tiếp (qua ROWID). Phơng thức truy nhập này sẵn dùng cho các câu lệnh mà những table kết nối trong cùng một Cluster và nếu cả hai điều kiện sau cùng đúng: 6* Câu lệnh phải có mệnh đề FROM chứa điều kiện mà mỗi cột của Cluster là khoá của một bảng khác. 7* Mệnh đề FROM cũng phải đảm bảo điều kiện kết nối chỉ trả lại duy nhất một hàng. Những điều kiện nh vậy thờng là khoá duy nhất hoặc là khoá chính. Trong những điều kiện phải có chứa toán tử AND để Oracle có thể xây dựng thành thao tác Nested Loops. VD: Trong bảng NhânViên và bảng Phòng có chứa cột MãPhòng và cột MãNhânViên là khoá chính của bảng NhânViên. SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng AND NhânViên.M NhânViên=7900;ã ã ã 5.3. Chọn một hàng bằng khoá băm (Hash Key) với khoá duy nhất hoặc khoá chính Duyệt băm (Hash Scans) là phơng pháp truy nhập tới hàng bằng cách sử dụng hàm băm (Hash Function). Phơng thức này sẵn dùng khi mà cả hai điều kiện sau đợc thoả mãn: 8* Câu lệnh phải có mệnh đề FROM sử dụng tất cả các cột trong khoá của hàm băm. Mặt khác để dùng đợc khoá của hàm băm thì các điều kiện tơng ứng phải kết nối với nhau bằng toán tử AND. 9* Câu lệnh phải đảm bảo chỉ trả lại một giá trị hàng duy nhất bởi vì giá trị các cột tạo thành khoá của hàm băm cũng tạo ra một khoá duy nhất hoặc là khoá chính. Để thực hiện câu lệnh này, Oracle dùng hàm băm để định giá trị khoá băm tơng ứng với các giá trị cung cấp bởi câu lệnh. Giá trị khoá tìm đợc sẽ sử dụng để tìm bản ghi tơng ứng trong table. Ví dụ: Giả sử rằng trong bảng HoáĐơn và bảng NộiDungHoáĐơn đợc lu trong một nhóm hàm băm và SốHoáĐơn vừa là khoá chính vừa là khoá hàm băm. Câu lệnh sau sẽ sử dụng phơng thức hàm băm. SELECT * FROM HoáĐơn WHERE SốHoáĐơn = 65118968; 5.4. Chọn một hàng bằng sử dụng khoá duy nhất hoặc bằng khoá chính Phơng thức này chỉ dùng đợc khi câu lệnh phải có mệnh đề FROM có sử dụng tất cả các cột của khoá duy nhất (hoặc khoá chính) trong điều kiện tơng ứng. Để có thể sử dụng đợc khoá thì các điều kiện tơng ứng với cột nằm trong khoá phải liên kết với nhau bằng toán tử AND. Thông qua bảng Index tơng ứng với các khoá thì Oracle sẽ tìm đợc ROWID tơng ứng để truy nhập trực tiếp tới hàng. VD: Giả sử MãNhânViên là khoá chính của bảng NhânViên, câu lệnh sau sẽ sử dụng phơng thức truy nhập này. SELECT * FROM NhânViên WHERE M NhânViên = 7900;ã 5.5. Kết nối Cluster (Cluster join) Phơng thức này sẵn dùng khi mà điều kiện kết nối các bảng đều đợc chứa trong cùng một nhóm (Cluster) và nếu điều kiện kết nối trong mệnh đề FROM thoả mãn mỗi cột trong kết nối là khoá của bảng này và là cột trong bảng kia. Và để sử dụng đợc khoá của kết nối thì các điều kiện phải nối với nhau bởi toán tử AND. Lúc đó Oracle sẽ tiến hành hoàn thành câu lệnh Nested-Loop. VD: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng = Phòng.M Phòng;ã ã 5.6. Khoá của các hàng có cùng giá trị băm Câu lệnh phải có mệnh đề FROM sử dụng tất cả các cột trong khoá của hàm băm. Mặt khác để dùng đợc khoá của hàm băm thì các điều kiện tơng ứng phải kết nối với nhau bằng toán tử AND. Oracle sẽ tiến hành duyệt bảng dựa trên khoá hàm băm tìm đợc. VD: Giả sử rằng trong bảng HoáĐơn và bảng NộiDungHoáĐơn đợc lu trong một nhóm hàm băm và SốHoáĐơn vừa là khoá chính vừa là khoá hàm băm. Câu lệnh sau sẽ sử dụng phơng thức hàm băm. SELECT * FROM NộiDungHoáĐơn WHERE SốHoáĐơn = 65118968; 5.7. Khoá của các hàng có cùng giá trị Index Khi mà các bảng đợc Index thì cùng với giá trị của trờng Index còn có các ROWID. Nếu câu lệnh chỉ sử dụng giá trị các trờng Index thì các giá trị này sẽ đợc lấy trực tiếp từ bảng Index thay vì lấy từ bảng dữ liệu còn trong trờng hợp là các giá trị khác thì sẽ truy nhập ROWID tìm đợc từ bảng Index. VD: Giả sử trong bảng NhânViên thì MãPhòng đã đợc Index. SELECT * FROM NhânViên WHERE M Phòng=10;ã 5.8. Index phối hợp Khi có câu lệnh có sử dụng nhiều cột đợc Index phối hợp và trong mệnh đề FROM và các điều kiện này đợc liên kết với nhau bằng toán tử AND. Oracle sẽ tiến hành duyệt trên các vùng Index để tìm ra các ROWID , từ đó có thể truy nhập đến các hàng tơng ứng. VD: Giả sử cột Nghề và MãPhòng đợc Index phối hợp. Câu lệnh sau sẽ sử dụng Index phối hợp. SELECT * FROM NhânViên WHERE Nghề = 'Th kí' AND M Phòng = 10;ã 5.9. Sử dụng Index đơn Khi câu lệnh sử dụng các cột của Index đơn thì Oracle sẽ tiến hành tìm ra các ROWID truy nhập đến các hàng tơng ứng. VD: Giả sử trong bảng NhânViên cột Nghề đã đợc Index. SELECT * FROM NhânViên WHERE Nghề = 'Th kí'; Nếu nh câu lệnh có sử dụng nhiều cột Index đơn thì Oracle sẽ lấy giao của tập hợp các ROWID nhận đợc khi duyệt các Index theo điều kiện. Từ tập hợp chung này Oracle mới tiến hành truy nhập đến các hàng tơng ứng. VD: Trong bảng NhânViên thì cột Nghề và MãPhòng đợc Index đơn. SELECT * FROM NhânViên WHERE Nghề = 'Phân tích viên' AND M Phòng = 20;ã 5.10. Giới hạn tập hợp Index (Index Range Scan) Phơng thức này đợc sử dụng khi trong câu lệnh có chứa điều kiện giới hạn các Index đơn hoặc thành phần đứng trớc trong Index nhiều cột có dạng nh sau <tên cột> = <biểu thức> <tên cột > >[=] <biểu thức> AND <tên cột> <[=] <biểu thức> <tên cột> BETWEEN <biểu thức> AND <biểu thức> <tên cột> LIKE 'c%' Nếu nh câu lệnh có tham chiếu tới cột Index thì phơng thức truy nhập này không đợc sử dụng. VD: Giả sử cột Lơng trong bảng NhânViên là một Index, các câu lệnh sau sẽ sử dụng phơng thức duyệt dựa trên giới hạn của Index. SELECT * FROM NhânViên WHERE Lơng BETWEEN 2000 AND 3000; SELECT * FROM NhânViên WHERE TênNhânViên LIKE 'S%'; 5.11. Không giới hạn vùng Index Phơng thức này có thể đợc sử dụng khi trong câu lệnh có chứa điều kiện giới hạn các Index đơn hoặc thành phần đứng trớc trong Index nhiều cột có dạng nh sau <tên cột > >[=] <biểu thức> <tên cột> <[=] <biểu thức> Trong trờng hợp này vùng Index bị giới hạn về một phía (chặn trên hoặc chặn dới). Ví dụ trong trờng hợp Index đơn: SELECT * FROM NhânViên WHERE Lơng > 2000; Ví dụ trong trờng hợp Index trên nhiều trờng: Giả sử có Index trên MãHoáĐơn và DòngHoáĐơn của bảng NộiDungHoáĐơn. SELECT * FROM NộiDungHoáĐơn WHERE M HoáĐơn > 65118968;ã Do MãHoáĐơn là phần đứng trớc trong Index nhiều cột nên phơng thức truy nhập này đợc sử dụng. Tuy nhiên câu lệnh sau đây vì DòngHoáĐơn là thành phần đứng sau trong Index nhiều cột nên phơng thức truy nhập này không đợc sử dụng. SELECT * FROM NộiDungHoáĐơn WHERE DòngHoáĐơn <4; 5.12. Sắp xếp kết nối [...]... Một trong các điều quan trọng nhất trong việc tối u một cây phân tích lệnh là làm nh thế nào để có thể nhận đợc dữ liệu từ CSDL Khi bất kì câu lệnh SQL nào truy nhập đến bất kì hàng của bảng trong CSDL thì có thể có nhiều phơng thức truy nhập để tìm kiếm và lấy ra hàng đó Oracle sẽ tiến hành chọn ra một phơng thức truy nhập mà nó cho rằng tối u nhất tuỳ theo việc áp dụng luật tối u cơ bản hay luật tối. .. hình sử dụng nằm trong Data File Usg1BRN.ora kích thớc 50M; Tablespace METER chứa các thông tin về đồng hồ nằm trong Data File Met1BRN.ora kích thớc 50M; 3 Tối u vùng nhớ hệ thống SGA Khi Oracle hoạt động thì mọi thông tin phải chứa trong bộ nhớ hoặc đĩa Do việc truy xuất trên RAM sẽ nhanh hơn nhiều với việc truy xuất trên đĩa cho nên một trong những thao tác cơ bản trong tối u để hệ thống có thể hoạt... toàn bộ 6 Các luật tối u Có hai luật tối u trong Oracle là luật tối u cơ bản và luật tối u ớc lợng giá 6.1 Luật tối u cơ bản (rule-based) thức Nội dung cơ bản của luật này là chọn ra cách thức truy nhập tới hàng dựa trên mức độ u tiên của các phơng Trớc tiên Oracle sẽ kiểm tra điều kiện sau mệnh đề WHERE của câu lệnh để xác định những phơng thức nào câu lệnh có thể sử dụng đợc Tiếp đó Oracle sẽ tiến hành... thì Oracle sẽ chọn bảng đầu tiên mà truy nhập theo phơng pháp duyệt có giới hạn và số cột nằm trong phần đầu Index là tối đa +Nếu vẫn cha hiệu quả thì Oracle sẽ chọn bảng xuất hiện sau cùng trong mệnh đề FROM 6.2 Chọn cách thực hiện kết nối với luật tối u Cost-based Oracle sẽ tạo ra một tập hợp các cách thực hiện dựa trên các thứ tự kết nối có thể, thao tác kết nối và các cách truy nhập tới bảng Oracle. .. rỗi: M 33* Mức Index thuộc tính trong quan hệ R, đối với CSDL Oracle là B-Tree Trớc tiên Oracle sẽ xác định cách thức truy nhập nào có thể dùng đợc bằng cách kiểm tra điều kiện trong mệnh đề WHERE Tiếp đó Oracle sẽ định giá mỗi cách truy nhập dựa trên đặc điểm của dữ liệu nh trạng thái Storage, các Table, các Index, Cluster trong từ điển dữ liệu (Data Dictionary) Bộ tối u hoá cũng quan tâm đến các... Lơng>2,000; Trong phụ lục B sẽ giới thiệu về quá trình tối u bằng thay đổi câu lệnh trên view của phần mềm Tra cứu văn bản pháp qui Thời gian thực hiện câu lệnh cha tối u là 41.43 giây, sau khi tối u thời gian thực hiện còn 2.36 giây (bằng 4.8 %) Trong phụ lục C sẽ giới thiệu về quá trình tối u bằng thay đổi câu lệnh kết nối cũng của phần mềm Tra cứu văn bản pháp qui Thời gian thực hiện câu lệnh cha tối u... câu lệnh thì Oracle sẽ đa ra các chú giải về cây phân tích đợc thực hiện PLAN để mỗi khi thực hiện C Các bớc tối u hoá Có thể tối u hoá ở mức ứng dụng bằng cách xây dựng các bảng, lựa chọn giải pháp Index, các View thích hợp Sau đó sẽ tối u ở mức câu lệnh bằng cách thay đổi lại câu lệnh để nó đợc thực hiện có hiệu quả hơn Mặc dù Oracle có thể hỗ trợ cho việc tối u câu lệnh nhng tuy nhiên Oracle không... phạm điều kiện này D Kết luận về phơng pháp tối u trong Oracle Sau khi đã tìm hiểu cách thực hiện câu lệnh với các trạng thái của dữ liệu có thể rút ra các cách thức để cho câu lệnh đợc thực hiện một cách tối u nh sau: 1 Tối u bằng việc thay đổi các thực thể Bớc này đợc thực hiện trong giai đoạn thiết kế phần mềm và việc thay đổi các thực thể chỉ đợc sử dụng trong các trờng hợp đặc biệt khi việc thiết... chọn luật tối u ALL_ROWS: Chỉ đẫn này báo cho Oracle biết phải sử dụng luật tối u ớc lợng giá cho khối lệnh sao cho tổng số tài nguyên đợc sử dụng là tối thiểu (nghĩa là số khối lệnh đợc xử lý đồng thời là tối đa) Ví dụ: SELECT /*+ ALL_ROWS */ MãNhânViên,TênNhânViên FROM NhânViên WHERE MãNhânViên=7566; FIRST_ROWS: Chỉ dẫn chọn luật tối u ớc lợng giá với thời gian đáp ứng là tối thiểu (và tối thiểu... minh hoạ xây dựng lại thực thể 2 Tối u các Table space Bớc này đợc thực hiện trong quá trình tạo thiết kế phần mềm Lý do sử dụng việc phân bố các thực thể vào các Table là CSDL trong Oracle đợc tạo nên từ các Tablespace, bằng việc sắp xếp các bảng trong các Tablespace hợp lý cũng có thể tăng đáng kể tốc độ thực hiện câu lệnh Với các bảng ít cập nhật dữ liệu thì nên để trong một Tablespace (nh bảng chứa . III Phơng pháp tối u hoá trong Hệ CSDL Oracle A. Các khái niệm cần biết để tối u hoá Phần này sẽ đa ra một số khái niệm đợc sử dụng quá trình tối u hoá phải duyệt toàn bộ. 6. Các luật tối u Có hai luật tối u trong Oracle là luật tối u cơ bản và luật tối u ớc lợng giá. 6.1. Luật tối u cơ bản (rule-based) Nội

Ngày đăng: 06/10/2013, 08:20

HÌNH ẢNH LIÊN QUAN

Khi mà các bảng đợc Index thì cùng với giá trị của trờng Index còn có các ROWID. Tuỳ theo giá trị của cột Index có là khoá duy nhất hay không thì tơng ứng với một khoá của Index có thể có một hoặc có nhiều ROWID  - Phương pháp tối ưu hóa trong hệ CSDL Oracle
hi mà các bảng đợc Index thì cùng với giá trị của trờng Index còn có các ROWID. Tuỳ theo giá trị của cột Index có là khoá duy nhất hay không thì tơng ứng với một khoá của Index có thể có một hoặc có nhiều ROWID (Trang 2)
Khi thực hiện phép Index với cột KhuVực sẽ thu đợc bảng sau: - Phương pháp tối ưu hóa trong hệ CSDL Oracle
hi thực hiện phép Index với cột KhuVực sẽ thu đợc bảng sau: (Trang 3)
Trong bảng Index thì mỗi cột ứng với một đề mục trong cột Index, ví dụ cột KhuVực=KV1 thì giá trị 1 ứng với hàng của Bảng SinhViên có KhuVực=KV1, ngợc lại là giá trị 0. - Phương pháp tối ưu hóa trong hệ CSDL Oracle
rong bảng Index thì mỗi cột ứng với một đề mục trong cột Index, ví dụ cột KhuVực=KV1 thì giá trị 1 ứng với hàng của Bảng SinhViên có KhuVực=KV1, ngợc lại là giá trị 0 (Trang 3)
Bảng NhânViên - Phương pháp tối ưu hóa trong hệ CSDL Oracle
ng NhânViên (Trang 4)
hàng. Sau đó truy nhập đến bảng băm thông qua khoá hàng băm và lấy ra đợc ROWID để truy nhập trực tiếp đến hàng. - Phương pháp tối ưu hóa trong hệ CSDL Oracle
h àng. Sau đó truy nhập đến bảng băm thông qua khoá hàng băm và lấy ra đợc ROWID để truy nhập trực tiếp đến hàng (Trang 5)
Oracle sẽ duyệt toàn bộ các bảng và chia (băm) chúng ra thành nhiều đoạn dựa vào bộ nhớ có sẵn. - Phương pháp tối ưu hóa trong hệ CSDL Oracle
racle sẽ duyệt toàn bộ các bảng và chia (băm) chúng ra thành nhiều đoạn dựa vào bộ nhớ có sẵn (Trang 6)
Oracle có thể thực hiện việc kết nối phân lớp với kết nối bằng mà giữa hai cột bảng nằm trong cùng một phân lớp - Phương pháp tối ưu hóa trong hệ CSDL Oracle
racle có thể thực hiện việc kết nối phân lớp với kết nối bằng mà giữa hai cột bảng nằm trong cùng một phân lớp (Trang 6)
Oracle chỉ có thể chọn một thành phần truy nhập trong bảng đã liệt kê cho một bảng nếu câu lệnh chứa mệnh đề điều kiện  FROM hoặc những cấu trúc khác làm cho các cách truy nhập trở thành có thể dùng đợc. - Phương pháp tối ưu hóa trong hệ CSDL Oracle
racle chỉ có thể chọn một thành phần truy nhập trong bảng đã liệt kê cho một bảng nếu câu lệnh chứa mệnh đề điều kiện FROM hoặc những cấu trúc khác làm cho các cách truy nhập trở thành có thể dùng đợc (Trang 7)
Phơng thức truy nhập dữ liệu (Acces Path) là cách thức truy nhập tới một hàng của bảng - Phương pháp tối ưu hóa trong hệ CSDL Oracle
h ơng thức truy nhập dữ liệu (Acces Path) là cách thức truy nhập tới một hàng của bảng (Trang 7)
Giả sử có các bảng NhânViên chứa các thông tin về NhânViên nh Lơng, Nghề, Tên, MãPhòng ...v.v và bảng Phòng chứa MãPhòng và TênPhòng để liên kết với bảng NhânViên. - Phương pháp tối ưu hóa trong hệ CSDL Oracle
i ả sử có các bảng NhânViên chứa các thông tin về NhânViên nh Lơng, Nghề, Tên, MãPhòng ...v.v và bảng Phòng chứa MãPhòng và TênPhòng để liên kết với bảng NhânViên (Trang 15)
3 Truy nhập bảng Duyệt toàn bộ NhânViên - Phương pháp tối ưu hóa trong hệ CSDL Oracle
3 Truy nhập bảng Duyệt toàn bộ NhânViên (Trang 16)
Tablespace CUST chứa các bảng ít thay đổi về khách hàng và thông tin liên quan nằm trong Data File Cus1BRN.ora kích thớc 50M; - Phương pháp tối ưu hóa trong hệ CSDL Oracle
ablespace CUST chứa các bảng ít thay đổi về khách hàng và thông tin liên quan nằm trong Data File Cus1BRN.ora kích thớc 50M; (Trang 26)
Việc Index giúp tăng tốc độ truy nhập tới bảng tuy nhiên nó lại giảm tốc độ của quá trình thêm, cập nhật dữ liệu - Phương pháp tối ưu hóa trong hệ CSDL Oracle
i ệc Index giúp tăng tốc độ truy nhập tới bảng tuy nhiên nó lại giảm tốc độ của quá trình thêm, cập nhật dữ liệu (Trang 28)
FULL: Sử dụng phơng thức duyệt toàn bộ với một bảng đặc biệt bằng chỉ dẫn FULL(&lt;tên bảng hoặc bí danh&gt;) và nên sử dụng bí danh (alias) cho tên bảng. - Phương pháp tối ưu hóa trong hệ CSDL Oracle
d ụng phơng thức duyệt toàn bộ với một bảng đặc biệt bằng chỉ dẫn FULL(&lt;tên bảng hoặc bí danh&gt;) và nên sử dụng bí danh (alias) cho tên bảng (Trang 30)
ORDERED: Chỉ dẫn thứ tự kết nối tuân theo thứ tự xuất hiện tên các bảng trong mệnh đề FROM - Phương pháp tối ưu hóa trong hệ CSDL Oracle
h ỉ dẫn thứ tự kết nối tuân theo thứ tự xuất hiện tên các bảng trong mệnh đề FROM (Trang 32)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w