Để thêm một lưu ý rất quan trọng về những gì Mark S. đã đề cập trong bài đăng của mình. Trong tập lệnh SQL cụ thể đã được đề cập trong câu hỏi, bạn KHÔNG BAO GIỜ có thể đề cập đến hai nhóm tệp khác nhau để lưu trữ các hàng dữ liệu của bạn và cấu trúc dữ liệu chỉ mục.
Lý do tại sao là do thực tế chỉ mục được tạo trong trường hợp này là chỉ mục nhóm trên cột khóa chính của bạn. Dữ liệu chỉ mục nhóm và các hàng dữ liệu trong bảng của bạn có thể KHÔNG BAO GIỜ trên các nhóm tệp khác nhau.
Vì vậy, trong trường hợp bạn có hai nhóm tệp trên cơ sở dữ liệu của mình, ví dụ: PRIMARY và SECONDARY sau đó kịch bản được đề cập dưới đây sẽ lưu trữ dữ liệu hàng của bạn và dữ liệu chỉ mục nhóm trên cả nhóm tệp PRIMARY mặc dù tôi đã đề cập đến một nhóm tệp khác ([SECONDARY]
) cho dữ liệu bảng. Thú vị hơn là kịch bản cũng chạy thành công (khi tôi mong đợi nó đưa ra một lỗi như tôi đã đưa ra hai nhóm tệp khác nhau: P). SQL Server thực hiện thủ thuật đằng sau khung cảnh một cách im lặng và thông minh.
CREATE TABLE [dbo].[be_Categories](
[CategoryID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_be_Categories_CategoryID] DEFAULT (newid()),
[CategoryName] [nvarchar](50) NULL,
[Description] [nvarchar](200) NULL,
[ParentID] [uniqueidentifier] NULL,
CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED
(
[CategoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [SECONDARY]
GO
LƯU Ý: chỉ số của bạn có thể nằm trên một nhóm tập tin khác nhau CHỈ nếu chỉ mục được tạo ra là non-clustered trong tự nhiên.
Kịch bản dưới đây mà tạo ra một chỉ số không clustered sẽ được tạo ra trên [SECONDARY]
nhóm tập tin thay vì khi dữ liệu bảng đã nằm trên nhóm [PRIMARY]
file:
CREATE NONCLUSTERED INDEX [IX_Categories] ON [dbo].[be_Categories]
(
[CategoryName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Secondary]
GO
Bạn có thể tìm thêm thông tin về cách lưu trữ không chỉ mục nhóm trên một nhóm tệp khác có thể giúp các truy vấn của bạn hoạt động tốt hơn. Here là một liên kết như vậy.
Điều này cũng có nghĩa là nó thường là vô dụng và có thể được gỡ bỏ ** một cách an toàn khỏi tập lệnh. – MGOwen
Có, trong cùng một cách bạn chỉ có thể bỏ qua khởi tạo biến thành 0 và sai, bởi vì nó chỉ là mặc định, phải không? –
@MarkSowul Trừ khi bạn có lý do chính đáng để sử dụng điều này để tối ưu hóa hiệu suất, vâng, bạn có thể bỏ qua nó và để mặc định xảy ra. Khởi tạo biến thành '0' hoặc' false' là đảm bảo rằng mã của bạn đang hoạt động trong một trạng thái đã biết, đó là một mối quan tâm hợp lý và chính xác và không phải là một mối quan tâm tối ưu. – jpmc26