2010-03-12 37 views
13

Nếu tôi chạy Profiler, sau đó nó cho thấy rất nhiều chỉ số như mộtKhóa chính có tự động là chỉ mục không?

CREATE CLUSTERED INDEX [_dta_index_Users_c_9_292912115__K1] ON [dbo].[Users] 
(
[UserId] ASC 
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, 
ONLINE = OFF) ON [PRIMARY] 

UserId này là chìa khóa chính của người sử dụng bảng. Chỉ mục này có tốt hơn chỉ mục đã có trong bảng không:

ALTER TABLE [dbo].[Users] ADD CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED 
(
[UserId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 

Trả lời

6

Mọi bảng đều cần chỉ mục nhóm và khóa chính. Theo mặc định, PK được nhóm nhưng nó có thể không được nhóm nếu bạn muốn thực hiện.

Bạn đã xác định một PK non-clustered nên các hồ sơ cho thấy một nhóm chỉ số ...

Lưu ý: một bảng mà không có một nhóm chỉ số được gọi là một "đống" vì đó là một đống dữ liệu phi cấu trúc ...

+4

Dữ liệu trong bảng chưa được lập chỉ mục chắc chắn có cấu trúc – Charlie

+0

"Mỗi bảng cần chỉ mục nhóm" "Lưu ý: bảng không có chỉ mục nhóm ..." Bạn đã mâu thuẫn với chính mình - ý của bạn là gì? Và đối với mỗi bảng cần một khóa chính - theo kinh nghiệm của tôi, SQL Server sẽ cho phép bạn tạo một bảng mà không có một, như hầu hết các DBMS. – Stewart

1

Tốt hơn vì nó được nhóm lại.

+0

nó được nhóm theo mặc định, nhưng không phải là –

+0

PK từ bài đăng rõ ràng là không bị thay đổi. – wRAR

2

Về bản chất, bạn nên đặt khóa chính thành chỉ mục nhóm chứ không phải là chỉ mục chưa được chỉ định. Trong hầu hết các trường hợp, đây sẽ là một việc tốt để làm.

21

Có khóa chính luôn là chỉ mục.

Nếu bạn không có bất kỳ chỉ mục nhóm nào khác trên bảng, thì thật dễ dàng: chỉ mục nhóm làm cho bảng nhanh hơn, cho mọi thao tác. VÂNG! Nó có. Xem phần xuất sắc của Kim Tripp The Clustered Index Debate continues để biết thông tin cơ bản.

Vì vậy, thực sự, mọi bảng hữu ích (ngoại trừ có thể dàn xếp các bảng cho tải khối lượng lớn hoặc một vài trường hợp hiếm khác) nên có chỉ số nhóm. Nếu bạn không có một, nó khá rõ ràng DTA sẽ giới thiệu một, và đặt nó vào cột Primary Key (s) theo mặc định.

+3

"... làm cho bảng nhanh hơn, đối với mọi hoạt động" ngoài chèn? Không chèn có nhiều việc phải làm, vì nó cũng phải cập nhật chỉ mục? –

+2

KHÔNG !! Đọc bài đăng trên blog của Kim Tripp - trích dẫn: "Chèn ** nhanh hơn trong bảng được nhóm ** (nhưng chỉ trong bảng phân cụm" đúng ") so với một vùng heap. Vấn đề chính ở đây là tra cứu trong IAM/PFS đến xác định vị trí chèn trong một heap là chậm hơn so với trong một bảng phân cụm (nơi chèn vị trí được biết, được xác định bởi khóa cụm). " –

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