huong dan dung index_oracle

19
Index trong oracle RIKKEISOFT 05/29/2016 VienNN © Copyright 2016 Rikkeisoft

Upload: nguyen-ngoc-vien

Post on 13-Jan-2017

219 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Huong dan dung index_oracle

Index trong oracle

RIKKEISOFT

05/29/2016VienNN

©   Copyright 2016 Rikkeisoft

Page 2: Huong dan dung index_oracle

Outline1. What: Index là gì.2. When: Khi nào thì nên dùng index.3. Classification index : Các loại index trong oracle.4. How: Sử dụng index như nào.5. Avoid: Những điều nên tránh khi sử dụng để không

bị mất tác dụng của index.6. Quit.

©   Copyright 2016 Rikkeisoft

Page 3: Huong dan dung index_oracle

1. What• Là phương pháp sử dụng để tăng nhanh thời gian và

hiệu suất tìm kiếm dữ liệu mà không cần đọc dữ liệu toàn bộ bảng (Full table scan).

• Index là một đối tượng trong hệ quản trị cơ sở dữ liệu – là một cấu trúc dữ liệu được sử dụng nhằm tăng tốc độ tìm kiếm trong một table, nó giống như ‘chỉ mục’ trong thư viện giúp cho người đọc tìm kiếm sách mình cần một cách nhanh chóng và hiệu quả hay phần mục lục của mỗi cuốn sách giúp ta đến chổ cần đọc nhanh hơn.

©   Copyright 2016 Rikkeisoft

Page 4: Huong dan dung index_oracle

1. What• Chỉ mục giúp tăng tốc các truy vấn SELECT và các mệnh

đề WHERE, nhưng nó làm chậm việc dữ liệu nhập vào, với các lệnh UPDATE và INSERT. Tùy trường hợp cần thiết mới nên sử dụng index.

©   Copyright 2016 Rikkeisoft

Page 5: Huong dan dung index_oracle

2. When• Mặc dù các chỉ mục nhằm mục đích để nâng cao hiệu

suất của Database, nhưng đôi khi, bạn nên tránh dùng chúng. Dưới đây là một số điểm bạn cần xem xét để quyết định có nên sử dụng Index hay không.– Các chỉ mục không nên được sử dụng trong các bảng nhỏ

• Các bảng mà không thường xuyên có data cần insert.– Bảng mà thường xuyên có các hoạt động update, insert (Bit map

index)• Vì mỗi lần update hoặc insert nó rất chậm vì chiếm nhiều tài nguyên trên

máy.– Các chỉ mục không nên được sử dụng trên các cột mà chứa một số

lượng lớn giá trị NULL

– Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi.

©   Copyright 2016 Rikkeisoft

Page 6: Huong dan dung index_oracle

3. Classification index• Để phục vụ nhu cầu của việc performance oracle có

cung cấp vài loại index, và mỗi loại index có lợi thế khác nhau trong việc giúp truy xuất dữ liệu nhanh hơn.

• B-tree indexes• Bitmap indexes (and bitmap join indexes)• Index-organized tables (IOT)• Hash Clusters• Index Cluster• Nested Tables• Tuy nhiên trong buổi trình bày hôm nay tôi chỉ nói về

2 loại “B-tree indexes” và “Bitmap indexes ”, còn về các loại khác các bạn có thể tìm hiểu thêm.

©   Copyright 2016 Rikkeisoft

Page 7: Huong dan dung index_oracle

3. Classification index• Một số lưu ý khi sử dụng index tránh sử dụng các trường

hợp sau.– Bảng mà thường xuyên có các hoạt động update, insert

• Nếu 1 bảng mà hay có thay đổi về dữ liệu, thì index nó sẽ dễ bị đảo lộn hoặc nhầm lẫn.

– Các chỉ mục không nên được sử dụng trên các cột mà chứa một số lượng lớn giá trị NULL.

– Không nên dùng chỉ mục trên các cột mà thường xuyên bị sửa đổi.

©   Copyright 2016 Rikkeisoft

Page 8: Huong dan dung index_oracle

3. Classification index• B-tree index

– Dữ liệu index trong B-Tree được tổ chức và lưu trữ theo dạng tree, tức là có root, branch, leaf. Giá trị của các node được tổ chức tăng dần từ trái qua phải.

• B-Tree index được sử dụng trong các biểu thức so sánh dạng: =, >, >=, <, <=, BETWEEN và LIKE.

– Khi truy vấn dữ liệu thì việc tìm kiếm trong B-Tree là 1 quá trình đệ quy, bắt đầu từ root node và tìm kiếm tới branch và leaf, đến khi tìm được tất cả dữ liệu - thỏa mãn với điều kiện truy vấn thì mới dùng lại.

– B-Tree index được sử dụng cho những column trong bảng khi muốn tìm kiếm 1 giá trị nằm trong khoảng nào đó. Ví dụ: tìm kiếm những sinh viên có id từ 1-9.

– Dưới đây là dạng cấu trúc của B-tree index.

©   Copyright 2016 Rikkeisoft

Page 9: Huong dan dung index_oracle

3. Classification index• B-tree index

.

©   Copyright 2016 Rikkeisoft

Page 10: Huong dan dung index_oracle

3. Classification index• Bit map index

– Mỗi lút lá chứa một bit map (bản đồ ánh xạ bit) đối với mỗi giá trị khóa thay vì là danh sách các giá trị rowid.

– Mỗi bit trong map chứa 1 bit riêng rẽ (0 or 1) cho mỗi dòng.• ‘1’ là row phù hợp trong bit map.• ‘0’ là row không phù hợp trong bit map

– Nên sử dụng với các cột trong bảng mà có giá trị lặp đi lặp lại nhiều lần.

– Dưới đây là cấu trúc của dạng index bit map

©   Copyright 2016 Rikkeisoft

Page 11: Huong dan dung index_oracle

3. Classification index

©   Copyright 2016 Rikkeisoft

Page 12: Huong dan dung index_oracle

4. How

– Tạo data có thể dùng tool sql developer hoặc sql plus đi kèm khi cài oracle.

– Copy data từ bảng trên sang bảng test_index

– Cú pháp tạo B-tree in dex

©   Copyright 2016 Rikkeisoft

Page 13: Huong dan dung index_oracle

4. How• Tạo B-tree index(khi tại index nếu không viết rõ ràng mặc

định là b-tree index).– CREATE INDEX [index_name] ON table_name(ename);– Có thể tạo một index trên nhiều cột

• CREATE INDEX [index_name] ON table_name(column1,column2..);– Nếu muốn dùng index function với upper hoặc lower trong

oracle phải tạo index trên các function đó trước khi sử dụng.• CREATE INDEX [index_name_function] ON table_name(UPPER(column));

©   Copyright 2016 Rikkeisoft

Page 14: Huong dan dung index_oracle

4. How• Tạo Bitmap- index.

– CREATE BITMAP INDEX [index_name] ON table_name(ename);– Có thể tạo một index trên nhiều cột

• CREATE BITMAP INDEX [index_name] ON table_name(column1,column2..);

©   Copyright 2016 Rikkeisoft

Page 15: Huong dan dung index_oracle

5. Avoid• B tree index

– Để tránh làm mất tác dụng của index khi truy vấn ta cần lưu ý

• Không nên sử dụng hàm đối với trường đánh index:– SELECT * FROM TEST_INDEX WHERE UPPER ('CUST_FIRST_NAME) = UPPER

('CUST_FIRST_NAME ');

• Không nên sử dụng sử dụng toán tử not like, not in, <> với trường đánh index

– SELECT * FROM TEST_INDEX WHERE CUST_FIRST_NAME NOT LIKE 'CUST_FIRST_NAME%';

– SELECT * FROM TEST_INDEX WHERE CUST_FIRST_NAME NOT IN ('CUST_FIRST_NAME‘,’ 'CUST_FIRST_NAME2’);

– SELECT * FROM TEST_INDEX WHERE CUST_FIRST_NAME <> 'CUST_FIRST_NAME‘;©   Copyright 2016 Rikkeisoft

Page 16: Huong dan dung index_oracle

5. Avoid• Không nên sử dụng like ‘%str’

– SELECT * FROM TEST_INDEX WHERE CUST_FIRST_NAME LIKE ‘%CUST_FIRST_NAME’;

• không dùng Index cho cột dữ liệu kết hợp với bất kì thành phần khác– SELECT * FROM TEST_INDEX WHERE CUST_ID+1=1;

– Để xem được plan của index dùng tool SQL*PLUS– Nhập username có quyền cao nhất khi cài oracle

(SYS OR SYSTEM).– Nhập password.– SET AUTOTRACE ON.– SELECT * FROM INDEX_DEMO WHERE FULLNAME

LIKE ‘JONATHAN%’;

©   Copyright 2016 Rikkeisoft

Page 17: Huong dan dung index_oracle

5. Avoid• Lưu ý• Nếu sử dụng Index trên nhiều column, thì sẽ chỉ sử dụng column đầu tiên

(và thứ 2 nếu có nhiều hơn 2 column) được đánh index.

©   Copyright 2016 Rikkeisoft

Page 18: Huong dan dung index_oracle

6. Quit

©   Copyright 2016 Rikkeisoft

Page 19: Huong dan dung index_oracle

Thanks you

RIKKEISOFT

©   Copyright 2016 Rikkeisoft