Câu hỏi đơn giản, nhưng nó đã cằn nhằn tôi một lúc rồi ....
"chi phí" trong MySQL là gì và tôi có nên lo lắng không?
nhấp vào "tối ưu hóa bảng" có khắc phục được sự thật không?
Câu hỏi đơn giản, nhưng nó đã cằn nhằn tôi một lúc rồi ....
"chi phí" trong MySQL là gì và tôi có nên lo lắng không?
nhấp vào "tối ưu hóa bảng" có khắc phục được sự thật không?
Câu trả lời:
Dường như không gian đĩa tạm thời là cơ sở dữ liệu được sử dụng để chạy một số truy vấn, vì vậy bạn chỉ nên lo lắng nếu điều này thực sự cao.
Bạn có thể so sánh 'Tối ưu hóa bảng' với việc chống phân mảnh ổ cứng của bạn.
Tôi trích dẫn:
Mỗi cơ sở dữ liệu, theo thời gian, sẽ yêu cầu một số hình thức bảo trì để giữ cho nó ở mức hiệu suất tối ưu . Thanh lọc các hàng đã xóa, sắp xếp lại, nén, quản lý đường dẫn chỉ mục, chống phân mảnh, v.v. là những gì được gọi là TỐI ƯU HÓA trong mysql và các thuật ngữ khác trong cơ sở dữ liệu khác. Ví dụ, IBM DB2 / 400 gọi nó là THÀNH VIÊN TẬP TIN VẬT LÝ.
Nó giống như thay dầu trong xe hơi của bạn hoặc điều chỉnh. Bạn có thể nghĩ rằng bạn thực sự không cần phải làm vậy, nhưng bằng cách đó, chiếc xe của bạn chạy tốt hơn nhiều, bạn sẽ tiết kiệm xăng hơn, v.v. Một chiếc xe có nhiều quãng đường đòi hỏi phải điều chỉnh thường xuyên hơn. Một cơ sở dữ liệu được sử dụng nhiều đòi hỏi như nhau. Nếu bạn đang thực hiện nhiều thao tác CẬP NHẬT và / hoặc XÓA, và đặc biệt nếu các bảng của bạn có các cột có chiều dài thay đổi (VARCHAR, TEXT, v.v.), bạn cần tiếp tục điều chỉnh.
Nếu bạn đang nói về thứ phpMyAdmin
gọi overhead
, thì đó là kích thước thực của một tệp dữ liệu bảng so với kích thước lý tưởng của cùng một tệp dữ liệu (như thể khi được khôi phục từ bản sao lưu).
Vì lý do hiệu năng, MySQL
không nén các tệp dữ liệu sau khi xóa hoặc cập nhật các hàng.
Điều này overhead
không tốt cho quét bảng, tức là khi truy vấn của bạn cần chạy trên tất cả các giá trị bảng, nó sẽ cần xem xét nhiều không gian trống hơn.
Bạn có thể thoát khỏi overhead
bằng cách chạy OPTIMIZE TABLE
sẽ thu gọn bảng và chỉ mục của bạn.
Chi phí là Data_free của bảng, đó là Số byte được phân bổ nhưng không được sử dụng. Chúng ta có thể tìm thấy nó bằng lệnh SQL SHOW TABLE STATUS . Đó là không gian trống trong kích thước được phân bổ cho bảng của bạn.
Tối ưu hóa bảng có thể rất có vấn đề. Ví dụ: nếu bảng được sử dụng nhiều trên một trang web.
http://dev.mysql.com/doc/refman/5.1/en/optizes-table.html
Sau khi xóa một phần lớn của bảng MyISAM hoặc ARCHIVE hoặc thực hiện nhiều thay đổi đối với bảng MyISAM hoặc ARCHIVE với các hàng có độ dài thay đổi (các bảng có các cột VARCHAR, VARBINARY, BLOB hoặc TEXT). Các hàng đã xóa được duy trì trong một danh sách được liên kết và các hoạt động INSERT tiếp theo sử dụng lại các vị trí hàng cũ. <
Tôi tin rằng tôi đã xác nhận hành vi này. Và nó chắc chắn sẽ rất hữu ích.