Tôi đã có một bảng với số lượng lớn hàng (10K +) và khóa chính là GUID. Khóa chính được nhóm lại. Hiệu suất truy vấn khá thấp trên bảng này. Vui lòng cung cấp đề xuất để làm cho nó hiệu quả.Cải thiện hiệu suất của chỉ mục cụm GUID khóa chính
Trả lời
Bạn cần phải sử dụng newsequentialid() thay vì nhìn thấy ở đây Some Simple Code To Show The Difference Between Newid And Newsequentialid
Tôi đã đọc về newsequentialid() rất nhiều nhưng nó có vẻ là một hàm SQL, bất cứ ai có thể cho tôi biết phải làm gì nếu Guid đang được tạo ra từ Mã (C#). –
-1 Câu trả lời này có liên quan gì đến việc phân cụm chỉ mục vật lý? Người hỏi câu hỏi đã tuyên bố anh ta/cô ấy có 10 nghìn hàng và anh/cô ấy có lẽ không muốn đi và thay đổi tất cả các phím. – nashwan
Bạn có thể thử GUIDS tuần tự, điều này sẽ làm cho chỉ mục hiệu quả hơn. Thông tin here.
Chỉ mục nhóm trên GUID không phải là thiết kế tốt. Bản chất của GUID là nó là ngẫu nhiên, trong khi một chỉ số nhóm vật lý yêu cầu các bản ghi theo khóa. Hai điều hoàn toàn trái ngược nhau. Đối với mỗi chèn SQL phải sắp xếp lại các bản ghi trên đĩa! Xóa nhóm khỏi chỉ mục này!
Thời gian sử dụng phân cụm là khi bạn có thứ tự "tự nhiên" cho dữ liệu: thời gian chèn, số tài khoản, v.v. Đối với các trường thời gian, phân cụm gần như miễn phí. Đối với số tài khoản, số này có thể là miễn phí hoặc giá rẻ (khi số tài khoản được gán tuần tự).
Mặc dù có thể có các cách kỹ thuật xung quanh vấn đề GUID, ý tưởng tốt nhất là hiểu khi nào nên sử dụng phân cụm.
+1 cho tông màu khắc nghiệt. Không có nhiều khu vực màu xám trong câu hỏi này. Đừng làm thế. – Droogans
hãy tránh tạo clustered index cho cột chuỗi lenghty. GUID sẽ có 36 char. Nó sẽ làm giảm hiệu suất truy vấn ngay cả khi bạn đã tạo chỉ mục nhóm. để thực hành tốt hơn, hãy sử dụng các cột nhận dạng số nguyên.
Hướng dẫn là 16 byte - không phải 36 ký tự. –
số nguyên không phải là thiết kế tốt cho cơ sở dữ liệu lớn – Leonardo
Kimberly Tripp thảo luận về vấn đề này cho các bảng lớn rất tốt trên trang web của mình tại liên kết này: [GUIDs as PRIMARY KEYs và/hoặc clustering key] (http://www.sqlskills.com /BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx). – Graeme
Bạn cần phải phân tích truy vấn của mình. Chúng tôi chỉ có thể đoán tại sao truy vấn của bạn hoạt động kém mà không xem kế hoạch thực hiện (bạn có thể yên tâm dễ dàng từ SQL Server hoặc Oracle).
Xét rằng GUID là giá trị 128 bit (nếu được lưu trữ thô), GUID cắt mật độ dữ liệu và khối chỉ mục nhiều đến 50% (trong trường hợp chỉ mục khóa chính), hãy đảm bảo GUID là thích hợp.
Nhưng đó có thể không phải là vấn đề, vì vậy hãy xem xét kế hoạch truy vấn. Nó có thể là một số vấn đề khác.
Không có vấn đề gì khi sử dụng GUID làm khóa chính. Chỉ cần đảm bảo rằng khi bạn thực sự đặt GUID làm khóa chính, hãy đặt chỉ mục mà nó tự động tạo thành loại Không được nhóm. Rất nhiều người quên (hoặc không biết) để làm điều này trong SQL Server.
KHÔNG BAO GIỜ sử dụng chỉ mục nhóm trên GUID. Điều này sẽ gây ra một thứ tự vật lý xung quanh GUID trên đĩa, điều này rõ ràng là vô nghĩa (như những người khác đã chỉ ra)
KHÔNG BAO GIỜ sử dụng chỉ mục nhóm trên GUID? Đó là một tuyên bố táo bạo. Bạn có chắc chắn không có ví dụ phản đối? – MarkPflug
Hãy đặt tên một tên nếu bạn biết một :-). Tôi thấy không có lý do tại sao bạn muốn thể chất thứ gì đó xung quanh một GUID. – nashwan
Nếu hiệu suất SELECT là quan trọng và bạn sẽ được CHỌN trên GUID ... –
Có thể trùng lặp [Thực tiễn tốt nhất để sử dụng GUID làm khóa chính là gì? (http://stackoverflow.com/questions/11938044/what-are-the-best-practices-for-using-a-guid-as-a-primary-key-specifically-rega) – AHiggins
Làm cho nó không được nhóm lại! (nếu nó phải giữ nguyên GUID) – nashwan