2008-11-26 46 views
24

Tôi đã đọc về refactoring một Query lớn SQL chậm hơn here, và đáp ứng cao nhất hiện nay là từ Mitch mì, ai muốn chắc chắn rằng các truy vấn sử dụng các chỉ số cho đã lựa chọn phương lớn, và đề cập đến:Khi nào các chỉ mục cơ sở dữ liệu nên được xây dựng lại?

Điều đầu tiên Tôi sẽ làm là kiểm tra để đảm bảo có một công việc duy trì chỉ số hoạt động đang chạy định kỳ. Nếu không, hãy nhận tất cả các chỉ mục hiện có được xây dựng lại hoặc nếu không thể, ít nhất hãy cập nhật số liệu thống kê.

Tôi chỉ là nghiệp dư DBA và tôi đã thực hiện một vài chương trình tự do về cơ bản là máy khách Java dành cho máy tính để bàn và đôi khi là một chương trình phụ trợ của MySQL. Khi tôi thiết lập hệ thống, tôi biết để tạo ra một chỉ số trên các cột sẽ được truy vấn bởi, có một trường hợp varchar và một varchar CustName.

Tuy nhiên, tôi đã thiết lập hệ thống này vài tháng trước và để khách hàng vận hành nó và tôi tin rằng các chỉ mục sẽ phát triển khi dữ liệu được nhập và tôi tin rằng mọi thứ vẫn hoạt động tốt. Tôi lo lắng mặc dù các chỉ mục sẽ được xây dựng lại định kỳ, bởi vì hôm nay tôi đã đọc rằng cần có một 'công việc bảo trì tích cực'. Công việc bảo trì duy nhất tôi đặt ra là một bản sao lưu hàng đêm.

Tôi muốn hỏi cộng đồng về bảo trì thường xuyên mà cơ sở dữ liệu có thể yêu cầu. Có cần thiết để xây dựng lại các chỉ mục? Tôi có thể tin tưởng chương trình phụ trợ MySQL để tiếp tục miễn là không có ai lộn xộn với nó và dữ liệu vẫn dưới một vài gigabyte?

Trả lời

24

Không cần phải 'xây dựng lại' chỉ mục. Chúng luôn được cập nhật. Có lẽ anh đang đề cập đến việc xây dựng lại cái bàn. Tùy thuộc vào các mẫu sử dụng và lược đồ của bạn, bạn có thể nhận được các trang bị phân mảnh trong InnoDB và tôi cũng nghĩ rằng trong MyISAM. Việc xây dựng lại bảng có thể cải thiện hiệu suất bằng cách loại bỏ phân mảnh dữ liệu của bạn trên đĩa. Tôi không sử dụng các bảng MyISAM thường xuyên, nhưng tôi tin rằng nên chạy 'OPTIMIZE TABLE' với các mẫu sử dụng nhất định. Xem tài liệu MySQL trên OPTIMIZE TABLE để biết một số thông tin tốt về cả MyISAM và InnoDB.

Tôi không quen thuộc với những phức tạp của MyISAM, nhưng với InnoDB, đúng là số liệu thống kê có thể bị lỗi thời. Cơ sở dữ liệu giữ các số liệu thống kê ước tính về cách dữ liệu của bạn được phân phối cho một chỉ mục cụ thể và có thể cho những người bị lỗi thời, nhưng MySQL/InnoDB có một số chức năng được tích hợp để cố gắng giữ số liệu thống kê hiện tại. Bạn thường không phải lo lắng về nó.

Vì vậy, nếu bạn đang sử dụng InnoDB, câu trả lời là không, bạn thường không cần phải chủ động làm bất cứ điều gì để giữ cho chỉ mục của bạn hoạt động tốt. Tôi không chắc chắn với MyISAM, tôi nghĩ rằng nó thường phổ biến hơn để cần phải tối ưu hóa những bảng đó thường xuyên.

+1

Từ liên kết của bạn: "OPTIMIZE TABLE nên được sử dụng nếu bạn đã xóa một phần lớn của bảng hoặc nếu bạn đã thực hiện nhiều thay đổi đối với bảng có các hàng có độ dài thay đổi" Có vẻ như tôi chỉ nên chạy OPTIMIZE nếu có thay đổi cấu trúc. Cảm ơn, Có vẻ như tôi không cần. – Karl

11

Bạn nên thiết lập cronjob để tối ưu hóa chỉ mục và kiểm tra lỗi.

Xem mysqlcheck. Một công việc cron điển hình trông giống như mysqlcheck -Aaos, kiểm tra tất cả các bảng trong tất cả các cơ sở dữ liệu về lỗi, tối ưu hóa chỉ mục và chỉ xuất ra lỗi.

+0

Tôi không có quyền truy cập vào máy mà không làm phiền khách hàng và khiến anh ta nghĩ rằng có thể có vấn đề. Tôi biết mẫu sử dụng và đang tìm kiếm thông tin về thời điểm tối ưu hóa là cần thiết. – Karl

+0

Sau đó, thành thật? Tôi sẽ không đổ mồ hôi. – Eli

2

Câu trả lời bạn đã liên kết về "bảo trì thường xuyên" là trong ngữ cảnh cụ thể của bảng tạm thời bị cắt ngắn và được sửa lại thường xuyên. Bạn không cần phải làm điều này với phần lớn các cài đặt cơ sở dữ liệu MySQL.

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