2012-03-31 17 views
6

Giả sử tôi có một bảng có khóa thay thế tự động gia tăng.Thực hành tốt để sử dụng các chỉ mục đảo ngược trên các khóa thay thế? (Oracle)

Đây có phải là trường hợp tốt để sử dụng chỉ mục đảo ngược không?

Am I correct trong đó nêu:

Insertions (vào index) sẽ nhanh hơn .. kể từ khi giá trị mới sẽ được chèn vào một cách ngẫu nhiên, thay vì luôn đi bên phải hầu hết lá (liên tục buộc tái cân bằng).

Chỉ số tra cứu sẽ chậm hơn một chút .. vì db sẽ phải chi tiêu (một chút) thời gian đảo ngược chỉ mục.

Vì đó là khóa thay thế .. Tôi không thực sự cần khả năng quét phạm vi (mà bạn không thể thực hiện với các chỉ mục ngược).

(Lưu ý, tôi không sử dụng Oracle RAC)

Trả lời

8

Nói chung, nếu bạn không sử dụng RAC, thì sẽ không có lý do để sử dụng một chỉ số ngược-key. Từ quan điểm hiệu suất, bạn nên sử dụng một hoặc hai khối nóng ở bất kỳ thời điểm nào có thể bị chèn bởi vì về cơ bản đảm bảo rằng các khối nóng sẽ nằm trong bộ đệm đệm và INSERT đã thắng không phải chịu chi phí đọc khối từ đĩa. Nếu bạn đã có chèn vào các khối ngẫu nhiên trong một chỉ mục, có một xác suất lớn hơn nhiều mà khối bạn muốn sẽ có tuổi từ bộ nhớ cache và sẽ phải chịu chi phí của một I/O vật lý.

Chi phí giữ chỉ số được cân bằng là khá nhỏ nhưng thậm chí có ưu tiên một chỉ số chuẩn. Nếu bạn đã tạo một khóa chính được tạo bằng một chỉ mục bình thường, Oracle sẽ thực hiện một số 90/10 block split ở khối bên phải khi khối đó đầy. Ngược lại, nếu bạn có chỉ số khóa đảo ngược, Oracle phải làm 50/50 block splits bất cứ khi nào một khối nhất định được lấp đầy. Một khối 50/50 chia sao chép một nửa dữ liệu từ khối cũ sang khối mới, khối chia tách 90/10 chỉ sao chép giá trị dữ liệu bên phải nhiều nhất vào khối mới. Do đó, việc tách khối 90/10 là rẻ hơn nhiều so với phân chia khối 50/50 và bạn cần phải thực hiện gần như cùng một số lượng phân tách khối bất kể loại chỉ mục bạn chọn. Vì vậy, chi phí duy trì một chỉ số thường xuyên là ít hơn chi phí duy trì một chỉ số chính đảo ngược thậm chí bỏ qua ảnh hưởng của bộ nhớ cache.

Lý do bạn cân nhắc sử dụng chỉ mục khóa đảo ngược là bạn đang sử dụng RAC và bạn muốn tránh chi phí có nhiều nút RAC tất cả đều chiến đấu trên cùng một khối nóng. Nếu bạn liên tục phải gửi khối nóng từ nút này sang nút khác để thực hiện bước chèn tiếp theo, có thể đáng giá để sử dụng chỉ mục khóa đảo ngược thay vì giảm bớt tranh chấp đó. Nếu bạn đã cấp phép tùy chọn phân vùng, thì tốt hơn là vẫn nên sử dụng chỉ mục băm được phân đoạn thay thế (điều này có thể được thực hiện cho dù các bảng có được phân đoạn) hay không. Nếu bạn chưa cấp phép tùy chọn phân vùng, chỉ mục khóa đảo ngược có thể đủ tốt để giải quyết tranh chấp trên khối nóng không yêu cầu bạn phải cấp phép phân vùng.

+0

Thực ra, theo kinh nghiệm của tôi, các chỉ mục chính đảo ngược không phải là tất cả những gì tuyệt vời trong RAC. Đó là kinh nghiệm của tôi rằng bạn đang tốt hơn nhiều với các chỉ số phân vùng băm (nơi số lượng phân vùng là công suất nhỏ nhất của 2 lớn hơn hoặc bằng số lượng các nút RAC). Tôi không thể nghĩ ra bất kỳ trường hợp nào mà các chỉ số chính đảo ngược có ý nghĩa. Lưu ý rằng bạn có thể có các chỉ mục được phân đoạn băm ngay cả trên một bảng không được phân đoạn. –

+0

@Mark - Đã chỉnh sửa câu trả lời của tôi để kết hợp điều này, cảm ơn. –

+0

Điểm tốt về yêu cầu giấy phép tùy chọn phân vùng. Vì chúng tôi có tùy chọn được cấp phép khá nhiều trong môi trường của chúng tôi, tôi luôn bỏ bê để xem xét điều đó. –

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