Nơi nào nên đặt chỉ mục trong một bảng thứ nguyên thời gian?


10

Sau khi đọc Câu hỏi và trả lời từ trang web này về các chỉ mục, một câu hỏi xuất hiện trong đầu tôi.

Điều gì sẽ xảy ra nếu, người ta đang sử dụng bảng thứ nguyên thời gian với mức độ chi tiết thấp hơn là ngày. Nơi nào nên đặt các chỉ số?

Câu hỏi của Randy Melder trong câu hỏi: Chỉ số của Nhật có nghĩa là gì trên RDBMS? nói :

Hãy nghĩ về một chỉ mục là "mục lục" ... đó là một danh sách được sắp xếp các con trỏ tới các vị trí trong một tệp, còn gọi là offset

Trong trường hợp theo chiều thời gian, hầu hết các nghiên cứu dữ liệu có thể được thực hiện cho một ngày cụ thể, một tuần cụ thể, một tháng cụ thể hoặc một quý cụ thể nếu bảng thời gian lưu trữ cả ngày trong một năm duy nhất .

Câu hỏi của tôi là: Có nên đặt chỉ mục cho tất cả các lĩnh vực đó?

Ngày được cho là duy nhất nên đối với điều này tôi hiểu hoàn toàn việc sử dụng các chỉ mục. Nhưng một id tuần sẽ có 7 lần xuất hiện , một id tháng sẽ có 30/31 lần xuất hiện , một id quý sẽ có ít nhất 120 lần xuất hiện .

  • Có nên đặt chỉ mục cho các lĩnh vực đó?
  • Nó sẽ vẫn hữu ích chứ?

Tôi đang hỏi bạn điều đó bởi vì trong cùng một câu hỏi, David Spillett nói:

Tất nhiên, việc thêm quá nhiều chỉ mục có thể là một sự tối ưu hóa tồi, vì không gian thêm được sử dụng để lưu trữ các chỉ mục (và tải IO để duy trì chúng nếu DB của bạn thấy nhiều thao tác ghi) có thể là một vấn đề tồi tệ hơn so với các truy vấn đọc tối ưu hơn một chút Vì vậy, đừng làm quá.

Vì vậy, những gì sẽ được xem xét tốt nhất cho trường hợp kích thước thời gian?

Câu trả lời:


7

Bạn có thể sẽ không gặp phải vấn đề viết lách, vì tôi cho rằng đây sẽ là thứ được tạo ra một lần (hoặc một lần mỗi năm), và sau đó không được chạm vào.

Nhưng việc sử dụng một chỉ mục có thể sẽ gây trở ngại nếu bạn tìm kiếm theo tuần ... Vấn đề là, nếu chỉ mục được sử dụng, nó có thể quét nó trước, sau đó lấy từng bản ghi ra khỏi bảng, khi bạn ' đang lấy ra hơn 5-20% hồ sơ, việc quét toàn bộ bảng sẽ nhanh hơn và sau đó loại bỏ các hồ sơ mà bạn không quan tâm.

Tôi không biết bất kỳ RDBMS chính nào không tối ưu hóa cho điều này khi dữ liệu được phân phối tốt. Nếu nó không được phân phối tốt (ví dụ: một trong các giá trị trong cột xảy ra 95%, nhưng cũng có các giá trị có thể khác), bạn có thể phải tính toán biểu đồ trên bảng và không sử dụng trình giữ chỗ cho giá trị khi tìm kiếm, để trình tối ưu hóa truy vấn có giá trị được tìm kiếm khi tạo kế hoạch thực hiện.

Tôi có thể không lập chỉ mục ngày trong tuần. Tôi sẽ kiểm tra tài liệu của cơ sở dữ liệu của mình để xem sự cân bằng của chúng đối với các lần đọc được lập chỉ mục so với quét toàn bộ bảng để xem liệu tôi có lập chỉ mục vào ngày của tháng hoặc tháng trong năm không. Tôi có khả năng lập chỉ mục DOY / ngày trong năm nếu có (dù sao có vẻ như đó là chỉ số duy nhất của bạn)


5

Một chỉ mục không nhất thiết phải là hữu ích, vì vậy câu trả lời là tùy thuộc . Nếu các truy vấn của bạn được hưởng lợi từ sự hiện diện của chỉ mục thì chúng có thể là một bổ sung đáng giá. Tôi không biết rằng nên có bất kỳ hướng dẫn đặc biệt nào liên quan đến các cột thời gian. Đối xử với họ như bất kỳ cột nào khác và lập chỉ mục cho họ dựa trên tính hữu ích cho các truy vấn.


Có ai khác ngoài tôi nghe giọng nói của Paul Randal mỗi khi họ nói hoặc đọc "nó phụ thuộc" liên quan đến cơ sở dữ liệu không? : p
AndrewQuery

3

Nguyên tắc chung là chỉ số càng chọn lọc (độ chọn lọc được xác định là số lượng giá trị duy nhất trong một cột chia cho số lượng hàng trong bảng), càng có nhiều khả năng động cơ sẽ sử dụng chỉ mục nếu truy vấn sử dụng cột trong mệnh đề where.

Nếu bạn đang xem xét lập chỉ mục một cột, chạy một truy vấn chọn trên cột được lập chỉ mục trước và sau và xem xét các kế hoạch thực hiện sẽ cho bạn biết nếu chỉ mục đang được sử dụng, và nếu vậy, chỉ mục này sẽ giúp được bao nhiêu. Lý tưởng nhất, truy vấn bạn sử dụng cho bài kiểm tra là một truy vấn sẽ được ứng dụng của bạn sử dụng.


1

Cho đến nay, quy tắc ngón tay cái của tôi là không đưa bất kỳ chỉ mục nào vào cơ sở dữ liệu phát triển của tôi trong khi tôi đang làm việc với chúng. Khi cơ sở dữ liệu sản xuất trở nên lớn hơn, tôi sử dụng ghi nhật ký cơ sở dữ liệuEXPLAINtìm ra những gì cần lập chỉ mục, và sau đó chỉ tạo các chỉ mục cần thiết. Điều này hoạt động tốt miễn là việc sử dụng cơ sở dữ liệu tăng dần và giữ cho chỉ số đếm thấp.

Khi phân tích dữ liệu trong cơ sở dữ liệu, tôi thường cần thêm các chỉ mục bổ sung để tăng tốc các yêu cầu không phổ biến trong sản xuất. Tôi luôn làm điều này trên các bản sao của cơ sở dữ liệu sản xuất, vì vậy các chỉ mục này không bao giờ được thêm vào sản xuất.

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.