2011-12-16 16 views

Trả lời

8

Từ: DB2 docs - Clustering indexes

Mặc dù một bảng có thể có nhiều chỉ số, chỉ có một chỉ số có thể là một chỉ số clustering. Nếu bạn không định nghĩa một chỉ mục phân cụm cho một bảng, DB2 sẽ nhận ra chỉ mục đầu tiên được tạo ra trên bảng dưới dạng chỉ mục phân cụm ngầm định khi nó đặt hàng các hàng dữ liệu.

Vì vậy, theo mặc định, khóa chính KHÔNG phải là chỉ mục nhóm của bảng.

Chỉ mục được tạo đầu tiên, duy nhất hay không, là chỉ mục phân cụm "ẩn" và DB2 cố chèn các bản ghi càng gần càng tốt theo thứ tự các giá trị của chỉ mục này.

Nếu sau này bạn tạo một chỉ mục khác và xác định nó là phân cụm, thì DB2 xác định nó làm chỉ mục phân cụm nhưng không sắp xếp lại dữ liệu đã có trong bảng. Điều này có thể được thực hiện với tiện ích REORG.

+0

Tôi luôn luôn tự hỏi những gì tất cả các hullabaloo trên REORGs là xung quanh đây. Bây giờ tôi biết. Cảm ơn! (ngay cả khi tôi không phải là OP) –

0

DB2 không tạo chỉ mục nhóm cho PK theo mặc định.

Khóa chính

Một khóa chính là một loại đặc biệt của khóa duy nhất và không thể chứa giá trị null. Ví dụ, cột DEPTNO trong bảng DEPT là một khóa chính.

Bảng không được có nhiều hơn một khóa chính. Các khóa chính là tùy chọn và có thể được định nghĩa trong câu lệnh CREATE TABLE hoặc ALTER TABLE.

Chỉ mục duy nhất trên khóa chính được gọi là chỉ mục chính. Khi một khóa chính được định nghĩa trong câu lệnh CREATE TABLE hoặc câu lệnh ALTER TABLE, DB2 sẽ tự động tạo chỉ mục chính nếu một trong các điều kiện sau là đúng:

DB2 đang hoạt động ở chế độ chức năng mới và không gian bảng là hoàn toàn tạo. DB2 đang hoạt động ở chế độ chức năng mới, không gian bảng được tạo một cách rõ ràng và bộ xử lý lược đồ đang chạy. DB2 đang hoạt động ở chế độ chuyển đổi và bộ xử lý lược đồ đang chạy. Nếu chỉ mục duy nhất đã tồn tại trên các cột của khóa chính khi được xác định trong câu lệnh ALTER TABLE, chỉ mục duy nhất này được chỉ định làm chỉ mục chính khi DB2 đang hoạt động ở chế độ chức năng mới và ngầm tạo không gian bảng.

Xem tại địa chỉ: Keys DB2

+1

Điều này quy định rằng * chỉ mục * được tạo cho PK. Câu hỏi đặt ra là, nó là một chỉ mục * nhóm *? Tức là, PK [index] xác định vị trí vật lý của dữ liệu hàng không được PK bao trả? –

+0

Xem thêm: [wikipedia: clustered index] (http://en.wikipedia.org/wiki/Index_%28database%29#Clustered) và [clustered index] (http://sql.wikis.com/wc.dll ? SQL ~ ClusteredIndex) và [các loại chỉ mục DB2] (http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.db2z.doc.intro/db2z_keys.html) –

+0

Bạn có thấy 'chỉ mục nhóm 'ở tài liệu không? sau đó .. DB2 không tạo nó cho một PK bởi befault ... –

2

Từ Publib (điều này giả định DB2 cho z/OS, phiên bản 9)

Khi một bảng có một chỉ số clustering, một câu lệnh INSERT gây DB2 để chèn các bản ghi như gần càng tốt theo thứ tự của chỉ số của họ giá trị.Chỉ mục đầu tiên mà bạn xác định trên bảng phục vụ hoàn toàn làm chỉ mục nhóm trừ khi bạn chỉ định rõ ràng CLUSTER khi bạn tạo hoặc thay đổi một chỉ mục khác. Ví dụ, nếu bạn xác định chỉ mục duy nhất trên cột EMPNO của bảng EMP, DB2 chèn hàng vào bảng EMP theo thứ tự của mã số nhân viên trừ khi bạn xác định rõ ràng chỉ mục khác làm chỉ mục nhóm.

Bạn có thể thấy chỉ số là chỉ số phân nhóm cho một bảng (trong ví dụ này, TEST.TABLE1) bằng cách sử dụng truy vấn sau đây, nếu bạn đang ở trên z/OS:

SELECT NAME 
FROM SYSIBM.SYSINDEXES 
WHERE TBCREATOR = 'TEST' 
    AND TBNAME  = 'TABLE1' 
    AND CLUSTERING = 'Y' 

Và một điều này cho Linux/Unix/Windows (LUW):

SELECT * 
FROM SYSCAT.INDEXES 
WHERE TABSCHEMA = 'TEST' 
    AND TABNAME = 'TABLE1' 
    AND INDEXTYPE = 'CLUS' 
+0

cảm ơn cho câu trả lời. btw: truy vấn đó không hoạt động, tôi nhận được lỗi này 'SQL0206N" CLUSTERING "không hợp lệ trong ngữ cảnh mà nó được sử dụng. SQLSTATE = 42703' – Luka

+0

@Luka, khi đó bạn có thể đang sử dụng DB2 trên LUW. Tôi đã thêm một truy vấn thứ hai sẽ giúp bạn có được thông tin tương tự. – bhamby

Các vấn đề liên quan