Có lệnh nào để tối ưu hóa tất cả các bảng MySQL từng cái một không?


8

Tôi thực hiện bên dưới câu lệnh dòng lệnh để tối ưu hóa một bảng: optimize table tablename;

Có bất kỳ lệnh hoặc câu lệnh nào có thể tối ưu hóa tất cả các bảng một trong các cơ sở dữ liệu đã chọn không?

Câu trả lời:



4

Bạn có thể sử dụng lược đồ thông tin để tạo các câu lệnh bạn cần:

SELECT Concat('OPTIMIZE TABLE ',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES 
   WHERE table_schema='yourdb';

1

Bạn có thể viết kịch bản và đặt tất cả các bảng trên một dòng

TẤT CẢ CÁC BẢNG TRONG CƠ SỞ HIỆN TẠI

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQL_DATA=mydb
TBLLIST=""
COMMA=""
SQL="SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE()"
for TBL in `mysql ${MYSQL_CONN} -D${MYSQL_DATA} -ANe"${SQL}"`
do
    TBLLIST="${TBLLIST}${COMMA}${TBL}"
    COMMA=","
done
SQL="OPTIMIZE TABLE ${TBLLIST};"
mysql ${MYSQL_CONN} -D${MYSQL_DATA} -ANe"${SQL}"

TẤT CẢ CÁC BẢNG TRONG TẤT CẢ CÁC DANH MỤC NGƯỜI DÙNG

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
TBLLIST=""
COMMA=""
SQL="SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE"
SQL="${SQL} table_schema NOT IN ('information_schema','mysql','performance_schema')"
for DBTB in `mysql ${MYSQL_CONN} -ANe"${SQL}"`
do
    TBLLIST="${TBLLIST}${COMMA}${DBTB}"
    COMMA=","
done
SQL="OPTIMIZE TABLE ${TBLLIST};"
set -x
mysql ${MYSQL_CONN} -ANe"${SQL}"

HÃY THỬ MỘT LẦN !!!


Điều này dường như mất nhiều thời gian trên máy chủ của tôi và tôi không thể thấy sự xâm phạm. bạn có thể thêm một số đầu ra mà bảng được tối ưu hóa trong vòng lặp?
rubo77

Tôi đã điều chỉnh tập lệnh của bạn để tối ưu hóa tất cả các cơ sở dữ liệu để nó được chạy từng cái một: stackoverflow.com/a/33541722/1069083
rubo77
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.