Là khái niệm về một chỉ mục được nhóm trong một thiết kế DB có hợp lý khi sử dụng SSD không?


44

Khi thiết kế lược đồ dữ liệu máy chủ SQL và các truy vấn tiếp theo, sprocs, khung nhìn, v.v., liệu khái niệm về một chỉ mục và thứ tự dữ liệu trên cụm có ý nghĩa gì để xem xét các thiết kế DB được triển khai rõ ràng trên nền tảng SSD không?

http://msdn.microsoft.com/en-us/l Library / aa933131 (v = sql.80) .aspx
"Một chỉ mục được nhóm xác định thứ tự vật lý của dữ liệu trong một bảng."

Trên nền tảng đĩa vật lý, thiết kế để xem xét chúng có ý nghĩa đối với tôi khi quét dữ liệu vật lý để truy xuất các hàng "tuần tự" có thể hiệu quả hơn so với tìm kiếm thông qua bảng.
Trên nền tảng SSD, tất cả các truy cập đọc dữ liệu sử dụng một tìm kiếm giống hệt nhau. Không có khái niệm về "trật tự vật lý" và dữ liệu đọc không phải là "tuần tự" theo nghĩa là các bit được lưu trữ trên cùng một miếng silicon.

Vì vậy, trong quá trình chỉ định một cơ sở dữ liệu ứng dụng là việc xem xét chỉ mục cụm có liên quan đến nền tảng này không?

Suy nghĩ ban đầu của tôi là không phải vì ý tưởng về "dữ liệu được đặt hàng" không áp dụng cho việc lưu trữ SSD và tối ưu hóa tìm kiếm / truy xuất lại.

EDIT: Tôi biết SQL Server sẽ tạo một cái, tôi chỉ đang triết lý về việc liệu nó có ý nghĩa khi nghĩ về nó trong quá trình thiết kế / tối ưu hóa hay không.


1
Một số bài viết về lĩnh vực chung này (không cụ thể cho câu hỏi của bạn) Trình tối ưu hóa truy vấn có cần phải biết về SSD không? Kỹ thuật xử lý truy vấn cho các ổ đĩa trạng thái rắn
Martin Smith

Câu trả lời:


34

Hãy tự hỏi mình một câu hỏi khác: Nếu toàn bộ cơ sở dữ liệu nằm trong bộ nhớ và tôi không bao giờ phải chạm vào đĩa, tôi có muốn lưu trữ dữ liệu của mình trong cây B được đặt hàng hay tôi muốn lưu trữ dữ liệu của mình trong một đống không có thứ tự?

Câu trả lời cho câu hỏi này sẽ phụ thuộc vào mẫu truy cập của bạn. Trong hầu hết các trường hợp, quyền truy cập của bạn yêu cầu tra cứu hàng đơn (ví dụ: tìm kiếm) và quét phạm vi. Các mẫu truy cập này yêu cầu B-Tree, nếu không chúng không hiệu quả. Một số mẫu truy cập khác, phổ biến trong DW và OLAP, luôn luôn thực hiện tổng hợp trên toàn bộ từ đầu đến cuối luôn và chúng không có lợi ích gì khi quét phạm vi. Khi bạn tiếp tục thực hiện các yêu cầu khác, như tốc độ chèn và phân bổ thành một đống so với B-Tree có thể đóng vai trò cho các công việc chuyển nhượng ETL khổng lồ. Nhưng hầu hết các câu trả lời thực sự sôi nổi với một câu hỏi: bạn có tìm kiếm hoặc quét phạm vi không? Số lần áp đảo của câu trả lời là CÓ. Và do đó, số lần áp đảo của thiết kế đòi hỏi một chỉ số co cụm.

Nói cách khác: chỉ vì giá rẻ để đọc nó từ đĩa theo thứ tự ngẫu nhiên không có nghĩa là bạn có thể bỏ rác các dòng TLB và L2 của mình trong một bonanza quét RAM 64Gb ...


Chi phí tra cứu hàng trong heap cơ sở, thậm chí trong bộ nhớ, sẽ luôn cao hơn chi phí lấy hàng trực tiếp trong tìm kiếm. Không chỉ từ địa phương truy cập bộ nhớ, mà còn từ số lượng hướng dẫn liên quan (Việc tra cứu về cơ bản là tham gia, với tất cả các máy móc vận hành tham gia).
Remus Rusanu

23

Nếu bạn sử dụng một chỉ mục được chọn tốt, bạn có nhiều khả năng nhận được tất cả dữ liệu liên quan bạn cần trong ít trang dữ liệu hơn. Đó là, bạn có thể giữ dữ liệu bạn cần trong ít bộ nhớ hơn. Điều này mang lại lợi ích bất kể bạn sử dụng đĩa quay hay SSD.

Nhưng bạn đã đúng rằng lợi ích khác của một chỉ mục được nhóm - để đọc / ghi dữ liệu liên quan theo tuần tự thay vì nhiều lần tìm kiếm đĩa - không phải là một lợi ích đáng kể cho SSD, trong đó tìm kiếm không phải là một chi phí hiệu năng quá lớn như chúng với đĩa quay.


Nhận xét của @Matthew PK.

Tất nhiên vị trí A trong RAM cũng nhanh như vị trí B trong RAM. Đó không phải là vấn đề. Tôi đang nói về trường hợp khi tất cả dữ liệu bạn cần sẽ không vừa với RAM nếu dữ liệu bị phân tán giữa nhiều trang. Bất kỳ trang nào cũng có thể chỉ chứa một lượng nhỏ dữ liệu bạn quan tâm. Vì vậy, RDBMS phải tiếp tục tải và thanh lọc các trang khi bạn truy cập A, B và các hàng khác. Đó là nơi bạn nhận được hình phạt hiệu suất.

Sẽ tốt hơn nếu mỗi trang chứa đầy dữ liệu bạn quan tâm, với hy vọng rằng tất cả các yêu cầu hàng tiếp theo được cung cấp từ các trang trong RAM. Sử dụng một chỉ mục được nhóm là một cách tốt để đảm bảo rằng dữ liệu của bạn được nhóm lại với nhau trên ít trang hơn.


13

Vâng, nó hoàn toàn vẫn có ý nghĩa. Bạn đang suy nghĩ quá thấp trong cách tiếp cận của bạn. SQL Server (trong một rất rất lời giải thích đơn giản hóa) các cửa hàng cụm dữ liệu trong một kiến trúc B-cây. Điều này cho phép truy xuất dữ liệu nhanh dựa trên các giá trị khóa chỉ mục được nhóm.

Một đống (không có chỉ mục cụm) không có thứ tự dữ liệu tuần tự. Điều quan trọng nhất cần xem xét ở đây là trong một đống các trang dữ liệu không được liên kết trong một danh sách được liên kết .

Vì vậy, câu trả lời là có, vẫn có ý nghĩa khi có các chỉ mục cụm được tạo trên các bảng, ngay cả trên ổ SSD. Tất cả đều dựa trên số lượng dữ liệu mà SQL Server phải sàng lọc để có được dữ liệu kết quả. Với một tìm kiếm chỉ mục cụm, nó được giảm thiểu.

Tham khảo: http://msdn.microsoft.com/en-us/l Library / ms189051.aspx


sẽ được một nhóm chỉ số. Vấn đề là liệu có tìm kiếm vấn đề trên nền tảng SSD hay không
Matthew

5
Vâng, vấn đề tìm kiếm. 3 lần đọc trái ngược với 300 lần đọc nhanh hơn bất kể bạn đang sử dụng phương tiện nào.
Thomas Stringer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.