Helpex - Trao đổi & giúp đỡ Đăng nhập
73

Tôi đang dành thời gian để tối ưu hóa cơ sở dữ liệu hiện tại của chúng tôi.

Tôi đang xem xét các chỉ số cụ thể.

Có một vài câu hỏi:

  • Có một điều như quá nhiều chỉ số?
  • Chỉ số nào sẽ tăng tốc?
  • Chỉ số nào sẽ chậm lại?
  • Khi nào nên thêm một chỉ mục?
  • Khi nào là một ý tưởng tồi để thêm một chỉ mục?
  • Pro và Con của nhiều chỉ mục so với chỉ mục nhiều cột?
73 hữu ích 0 bình luận 19k xem chia sẻ
128

Chỉ số nào sẽ tăng tốc?

Truy xuất dữ liệu - Câu lệnh CHỌN.

Chỉ số nào sẽ chậm lại?

Thao tác dữ liệu - Các câu lệnh INSERT, UPDATE, DELETE.

Khi nào nên thêm một chỉ mục?

Nếu bạn cảm thấy muốn có được hiệu suất truy xuất dữ liệu tốt hơn.

Khi nào là một ý tưởng tồi để thêm một chỉ mục?

Trên các bảng sẽ thấy thao tác dữ liệu nặng - chèn, cập nhật ...

Pro và Con của nhiều chỉ mục so với chỉ mục nhiều cột?

Các truy vấn cần giải quyết thứ tự các cột khi xử lý một chỉ mục bao phủ (một chỉ mục trên nhiều cột), từ trái sang phải trong định nghĩa cột chỉ mục. Thứ tự cột trong câu lệnh không thành vấn đề, chỉ có các cột 1, 2 và 3 - một câu lệnh cần có tham chiếu đến cột 1 trước khi chỉ mục có thể được sử dụng. Nếu chỉ có tham chiếu đến cột 2 hoặc 3, thì chỉ số che phủ cho 1/2/3 không thể được sử dụng.

Trong MySQL, chỉ có một chỉ mục có thể được sử dụng cho mỗi câu lệnh CHỌN / câu lệnh trong truy vấn (truy vấn con / vv được xem như một câu lệnh riêng). Và có giới hạn về dung lượng trên mỗi bảng mà MySQL cho phép. Ngoài ra, việc chạy một chức năng trên một cột được lập chỉ mục sẽ khiến chỉ mục trở nên vô dụng - IE:

WHERE DATE(datetime_column) = ...
128 hữu ích 3 bình luận chia sẻ
55

Tôi không đồng ý với một số câu trả lời cho câu hỏi này.

Có một điều như quá nhiều chỉ số?

Tất nhiên. Không tạo các chỉ mục không được sử dụng bởi bất kỳ truy vấn nào của bạn. Đừng tạo các chỉ mục dư thừa. Sử dụng các công cụ như pt-trùng lặp-khóa-kiểm trasử dụng pt-index để giúp bạn khám phá các chỉ mục bạn không cần.

Chỉ số nào sẽ tăng tốc?

  • Điều kiện tìm kiếm trong mệnh đề WHERE.
  • Tham gia điều kiện.
  • Một số trường hợp ĐẶT HÀNG B .NG.
  • Một số trường hợp NHÓM THEO.
  • Hạn chế ĐỘC ĐÁO.
  • Hạn chế FOREIGN KEY.
  • Tìm kiếm FULLTEXT.

Các câu trả lời khác đã khuyên rằng XÁC NHẬN / CẬP NHẬT / XÓA càng chậm thì càng có nhiều chỉ mục. Điều đó đúng, nhưng hãy xem xét rằng nhiều cách sử dụng CẬP NHẬT và XÓA cũng có các mệnh đề WHERE và trong MySQL, CẬP NHẬT và XÓA cũng hỗ trợ THAM GIA. Các chỉ mục có thể có lợi cho các truy vấn này hơn là bù cho chi phí cập nhật các chỉ mục.

Ngoài ra, InnoDB khóa các hàng bị ảnh hưởng bởi CẬP NHẬT hoặc XÓA. Họ gọi đây là khóa cấp hàng, nhưng thực sự là khóa cấp chỉ số. Nếu không có chỉ mục để thu hẹp tìm kiếm, InnoDB phải khóa nhiều hàng hơn so với hàng cụ thể mà bạn đang thay đổi. Nó thậm chí có thể khóa tất cả các hàng trong bảng. Các khóa này chặn các thay đổi được thực hiện bởi các khách hàng khác, ngay cả khi họ không xung đột về mặt logic.

Khi nào nên thêm một chỉ mục?

Nếu bạn biết bạn cần chạy một truy vấn sẽ có lợi từ một chỉ mục trong một trong các trường hợp trên.

Khi nào là một ý tưởng tồi để thêm một chỉ mục?

Nếu chỉ mục là tiền tố bên trái của một chỉ mục hiện có khác hoặc chỉ mục không giúp bất kỳ truy vấn nào bạn cần chạy.

Pro và Con của nhiều chỉ mục so với chỉ mục nhiều cột?

Trong một số trường hợp, MySQL có thể thực hiện tối ưu hóa hợp nhất chỉ mục và kết hợp hoặc cắt kết quả từ các tìm kiếm chỉ mục độc lập. Nhưng nó mang lại hiệu suất tốt hơn để xác định một chỉ mục duy nhất để việc hợp nhất chỉ mục không cần phải được thực hiện.

Đối với một trong những khách hàng tư vấn của tôi, tôi đã xác định một chỉ mục nhiều cột trên một bảng nhiều-nhiều nơi không có chỉ mục và cải thiện truy vấn tham gia của họ với hệ số 94 triệu!

Thiết kế các chỉ mục phù hợp là một quá trình phức tạp, dựa trên các truy vấn bạn cần tối ưu hóa . Bạn không nên thực hiện các quy tắc rộng như "lập chỉ mục mọi thứ" hoặc "lập chỉ mục không có gì để tránh làm chậm cập nhật."

Xem thêm phần trình bày của tôi Cách thiết kế chỉ mục, thực sự .

55 hữu ích 2 bình luận chia sẻ
7

Có một điều như quá nhiều chỉ số?

Các chỉ mục cần được thông báo bởi vấn đề hiện tại: các bảng, các truy vấn mà ứng dụng của bạn sẽ chạy, v.v.

Chỉ số nào sẽ tăng tốc?

CHỌN.

Chỉ số nào sẽ chậm lại?

CHERTN sẽ chậm hơn, vì bạn phải cập nhật chỉ mục.

Khi nào nên thêm một chỉ mục?

Khi ứng dụng của bạn cần một mệnh đề WHERE khác.

Khi nào là một ý tưởng tồi để thêm một chỉ mục?

Khi bạn không cần nó để truy vấn hoặc thực thi các ràng buộc duy nhất.

Ưu và nhược điểm của nhiều chỉ mục so với chỉ mục nhiều cột?

Tôi không hiểu câu hỏi. Nếu bạn có một ràng buộc duy nhất bao gồm nhiều cột, thì bằng mọi cách, hãy mô hình hóa nó như vậy.

7 hữu ích 0 bình luận chia sẻ
4

Có một điều như quá nhiều chỉ số?

Vâng. Đừng ra ngoài tìm cách tạo chỉ mục, tạo chúng khi cần thiết.

Chỉ số nào sẽ tăng tốc?

Bất kỳ truy vấn đối với bảng / xem chỉ mục.

Chỉ số nào sẽ chậm lại?

Bất kỳ câu lệnh INSERT nào đối với bảng được lập chỉ mục sẽ bị chậm lại, bởi vì mỗi bản ghi mới sẽ cần được lập chỉ mục.

Khi nào nên thêm một chỉ mục?

Khi một truy vấn không chạy ở tốc độ chấp nhận được. Bạn có thể lọc các bản ghi không phải là một phần của PK cụm, trong trường hợp đó bạn nên thêm chỉ mục dựa trên các bộ lọc bạn đang tìm kiếm (nếu hiệu suất phù hợp).

Khi nào là một ý tưởng tồi để thêm một chỉ mục?

Khi bạn làm điều đó vì lợi ích của nó - tức là tối ưu hóa quá mức.

Pro và Con của nhiều chỉ mục so với chỉ mục nhiều cột?

Phụ thuộc vào các truy vấn bạn đang cố gắng cải thiện.

4 hữu ích 0 bình luận chia sẻ
3

Có một điều như quá nhiều chỉ số?

Yup, giống như tất cả mọi thứ, quá nhiều chỉ mục sẽ làm chậm thao tác dữ liệu.

Khi nào nên thêm một chỉ mục?

Một ý tưởng tốt để thêm một chỉ mục là khi các truy vấn của bạn quá chậm (tức là bạn có quá nhiều phép nối trong các truy vấn của mình). Bạn chỉ nên sử dụng tối ưu hóa này sau khi bạn xây dựng một mô hình vững chắc, để điều chỉnh hiệu suất.

3 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql mysql indexing , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading