2010-01-26 37 views
8
begin transaction; 
create table person_id(person_id integer primary key); 
insert into person_id values(1); 
... snip ... 
insert into person_id values(50000); 
commit; 

Mã này mất khoảng 0,9 giây trên máy của tôi và tạo tệp db chiếm 392K. Những con số này sẽ trở thành 1,4 giây và 864K nếu tôi thay đổi dòng thứ hai thànhKhóa chính không được khóa cụm từ

create table person_id(person_id integer nonclustered primary key); 

Tại sao lại như vậy?

Trả lời

0

[Chỉ là ý tưởng]

Có thể khi bạn chỉ định rõ ràng để lấy cột nguyên là khóa nhóm, nó chỉ thực hiện điều đó. Nhưng khi bạn nói nó không sử dụng cột số nguyên của bạn, nó vẫn tạo ra một chỉ mục đằng sau hậu trường nhưng chọn một kiểu dữ liệu khác để làm điều đó, giả sử, gấp đôi số lượng lớn. Sau đó, mỗi mục trong số đó phải tham khảo các bản ghi trong bảng và ở đây bạn đi, kích thước đang bùng nổ.

2

Phân cụm khóa chính lưu trữ nó bằng các hàng; điều này có nghĩa là nó chiếm ít không gian hơn (vì không có khối chỉ mục riêng biệt). Tuy nhiên, thường thì lợi ích chính của nó là quét phạm vi thường có thể truy cập các hàng nằm trong cùng một khối, giảm các hoạt động IO, điều này trở nên khá quan trọng khi bạn có một tập dữ liệu lớn (không phải 50k ints).

Tôi nghĩ 50k ints là một điểm chuẩn khá giả tạo chứ không phải là điểm chuẩn mà bạn quan tâm trong thế giới thực.

+0

Nếu tôi không có kế hoạch làm tham gia, cũng không quét phạm vi và chỉ quan tâm đến hiệu suất chèn - sẽ có được cách nào tốt hơn để tạo bảng so với các ví dụ đầu tiên? –

+0

Nếu bạn chỉ quan tâm đến hiệu suất chèn, bạn không nên sử dụng bất kỳ chỉ mục nào (nếu được hỗ trợ) hoặc ghi dữ liệu vào tệp văn bản. Việc thêm vào các tệp văn bản khá nhanh. – MarkR

0

Tôi đã ngẫu nhiên các câu lệnh chèn và truy vấn lại với các giá trị từ một đến nửa triệu. Thật thú vị, cả hai tập tin db nhóm và nonclustered bây giờ chiếm số lượng chính xác của không gian (xuống đến byte). Tuy nhiên, chèn trên db nhóm lại vẫn nhanh hơn.

Đối với tôi, tính năng này trực quan. Khi tôi nói cho nhóm cơ sở dữ liệu những giá trị này - tôi đang nói với cơ sở dữ liệu ... những giá trị này tốt hơn theo thứ tự này khi tôi quay lại để lấy chúng. Khi tôi không có đặc điểm kỹ thuật, tôi về cơ bản nói với db - xem xét những giá trị này và sắp xếp chúng theo cách bạn thích - bất cứ điều gì làm cho cuộc sống của bạn dễ dàng hơn.

Về mặt lý thuyết, tự do bổ sung này sẽ không bao giờ làm chậm truy vấn. Có lẽ không tăng tốc chúng lên tất cả các thời gian, nhưng không bao giờ làm chậm chúng xuống. Suy nghĩ?

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