huong dan dung index_oracle
TRANSCRIPT
![Page 1: Huong dan dung index_oracle](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/1.jpg)
Index trong oracle
RIKKEISOFT
05/29/2016VienNN
© Copyright 2016 Rikkeisoft
![Page 2: Huong dan dung index_oracle](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/9.jpg)
3. Classification index• B-tree index
.
© Copyright 2016 Rikkeisoft
![Page 10: Huong dan dung index_oracle](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/11.jpg)
3. Classification index
© Copyright 2016 Rikkeisoft
![Page 12: Huong dan dung index_oracle](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/18.jpg)
6. Quit
© Copyright 2016 Rikkeisoft
![Page 19: Huong dan dung index_oracle](https://reader036.vdocuments.pub/reader036/viewer/2022082619/5878fafd1a28ab49608b671d/html5/thumbnails/19.jpg)
Thanks you
RIKKEISOFT
© Copyright 2016 Rikkeisoft