2010-10-28 19 views
7

Câu hỏi về lập chỉ mục số lượng lớn dữ liệu. Tôi có một bảng lớn (~ 30 triệu hàng), với 4 cột được lập chỉ mục để cho phép tìm kiếm nhanh. Hiện tại tôi đã đặt chỉ mục (chỉ mục?) Lên, sau đó nhập dữ liệu của tôi. Việc này mất khoảng 4 giờ, tùy thuộc vào tốc độ của máy chủ db. Nó sẽ được nhanh hơn/hiệu quả hơn để nhập dữ liệu đầu tiên, và sau đó thực hiện xây dựng chỉ mục?TSql, tạo chỉ mục trước hoặc sau khi nhập dữ liệu

Trả lời

8

Tôi muốn câu trả lời của af bằng cách nói rằng có thể là là trường hợp "chỉ mục đầu tiên, chèn sau" sẽ chậm hơn "chèn đầu tiên, chỉ mục sau" nơi bạn đang chèn bản ghi vào bảng chỉ mục nhóm, nhưng không chèn các bản ghi theo thứ tự tự nhiên của chỉ mục đó. Lý do là cho mỗi chèn, các hàng dữ liệu tự sẽ phải được đặt hàng trên đĩa.

Ví dụ, hãy xem xét một bảng có khóa chính được nhóm trên trường uniqueidentifier. Bản chất gần như ngẫu nhiên của một guid có nghĩa là có thể thêm một hàng ở đầu dữ liệu, làm cho tất cả dữ liệu trong trang hiện tại được xáo trộn (và có thể dữ liệu ở các trang dưới), nhưng hàng tiếp theo được thêm ở dưới cùng. Nếu cụm được bật, nói, cột ngày giờ và bạn tình cờ thêm hàng vào thứ tự ngày, thì các bản ghi sẽ tự động được chèn vào đúng thứ tự trên đĩa và các thao tác sắp xếp/xáo trộn dữ liệu tốn kém sẽ không cần thiết.

Tôi sẽ trả lời câu trả lời của Winston Smith về "nó phụ thuộc", nhưng gợi ý rằng chỉ số nhóm của bạn có thể là yếu tố quan trọng trong việc xác định chiến lược nào nhanh hơn cho hoàn cảnh hiện tại của bạn. Bạn thậm chí có thể thử không có một chỉ số nhóm ở tất cả, và xem những gì sẽ xảy ra. Cho tôi biết?

+0

+1 để biết thêm chi tiết và ngữ cảnh. –

+0

Dữ liệu được chèn vào theo thứ tự rất không được phân loại, việc lập chỉ mục sau khi chèn nhanh hơn nhiều. Cảm ơn lời giải thích. – John

3

Chèn dữ liệu trong khi các chỉ mục được đặt ra khiến DBMS cập nhật chúng sau mỗi hàng. Bởi vì điều này, nó thường nhanh hơn để chèn dữ liệu đầu tiên và tạo ra các chỉ số sau đó. Đặc biệt là nếu có nhiều dữ liệu.

(Tuy nhiên, nó luôn luôn có thể có những trường hợp đặc biệt mà có thể gây ra các đặc tính hiệu suất khác nhau. Cố gắng đó là cách duy nhất để biết chắc chắn.)

+0

** @ af ** Dựa trên những giả định nào là khái quát hóa của bạn? Gần đây tôi đã thử cả hai, và thấy nó nhanh hơn nhiều để chèn hàng loạt với các chỉ mục tại chỗ hơn để thả và tạo lại sau, mất khoảng 20 phút lâu hơn trên một tập dữ liệu của một vài triệu hàng. –

+0

Có, tất cả điều này phụ thuộc vào dữ liệu cụ thể, thứ tự của các hàng và chỉ mục. Hoàn toàn có thể là trong khi DBMS phải làm nhiều việc hơn trong việc chèn các công cụ theo từng hàng, nếu mọi thứ đều đúng thứ tự, DBMS chỉ có thể viết những thứ và không bao giờ kết thúc dữ liệu hoặc cân bằng cấu trúc dữ liệu chỉ mục. Những tình huống này thường là trường hợp ngoại lệ, không phải là tiêu chuẩn. Nó phụ thuộc. Thông thường mọi thứ không được xếp hàng "vừa phải". –

3

Nó sẽ phụ thuộc hoàn toàn vào dữ liệu và lập chỉ mục chiến lược cụ thể của bạn. Bất kỳ câu trả lời bạn nhận được ở đây thực sự là một đoán.

Cách duy nhất để biết chắc chắn là thử cả hai và thực hiện các phép đo thích hợp, điều này sẽ không khó thực hiện.

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