[mysql] MySQL은 모든 테이블을 최적화합니까?

MySQL에는 OPTIMIZE TABLE 명령이있어 MySQL 설치에서 사용되지 않은 공간을 회수 할 수 있습니다. 데이터베이스 및 / 또는 서버 설치의 모든 테이블에 대해이 최적화를 실행하는 방법 (내장 명령 또는 공통 저장 프로 시저)이 있습니까? 아니면 직접 스크립트해야합니까?



답변

mysqlcheck명령 행에서이를 수행 할 수 있습니다 .

하나의 데이터베이스 :

mysqlcheck -o <db_schema_name>

모든 데이터베이스 :

mysqlcheck -o --all-databases


답변

이 ‘간단한’스크립트를 만들었습니다.

set @tables_like = null;
set @optimize = null;
set @show_tables = concat("show tables where", ifnull(concat(" `Tables_in_", database(), "` like '", @tables_like, "' and"), ''), " (@optimize:=concat_ws(',',@optimize,`Tables_in_", database() ,"`))");

Prepare `bd` from @show_tables;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;

set @optimize := concat('optimize table ', @optimize);
PREPARE `sql` FROM @optimize;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;

set @show_tables = null, @optimize = null, @tables_like = null;

실행하려면 데이터베이스에 연결된 SQL IDE에 붙여 넣기 만하면됩니다.

주의 사항 :이 코드 는 phpmyadmin에서 작동하지 않습니다 .

작동 원리

show tables명령문을 실행하고 준비된 명령문에 저장합니다. 그런 다음 optimize table선택한 세트에서 a 를 실행합니다 .

var에 다른 값을 설정하여 최적화 할 테이블을 제어 할 수 있습니다 @tables_like(예 🙂 set @tables_like = '%test%';.


답변

다음 PHP 스크립트 예제는 데이터베이스의 모든 테이블을 최적화하는 데 도움이 될 수 있습니다

<?php

dbConnect();

$alltables = mysql_query("SHOW TABLES");

while ($table = mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       mysql_query("OPTIMIZE TABLE '".$tablename."'")
       or die(mysql_error());

   }
}

?>


답변

간단한 셸 스크립트를 사용하여 모든 데이터베이스의 모든 테이블을 수정하는 데 필요한 모든 절차를 수행하십시오.

#!/bin/bash
mysqlcheck --all-databases
mysqlcheck --all-databases -o
mysqlcheck --all-databases --auto-repair
mysqlcheck --all-databases --analyze


답변

모든 데이터베이스의 경우 :

mysqlcheck -Aos -uuser -p 

하나의 데이터베이스 최적화 :

mysqlcheck -os -uroot -p dbtest3


답변

phpMyAdmin 및 기타 소스에서 다음을 사용할 수 있습니다.

SET SESSION group_concat_max_len = 99999999;
SELECT GROUP_CONCAT(concat('OPTIMIZE TABLE `', table_name, '`;') SEPARATOR '') AS O
FROM INFORMATION_SCHEMA.TABLES WHERE
TABLE_TYPE = 'BASE TABLE'
AND table_name!='dual'
AND TABLE_SCHEMA = '<your databasename>'

그런 다음 결과를 새 쿼리에 복사하여 붙여 넣거나 자신의 소스에서 실행할 수 있습니다. 전체 내용을 볼 수없는 경우 :
phpmyadmin에서 전체 문장을 보는 방법


답변

MySQL 서버의 모든 데이터베이스에있는 모든 테이블을 분석, 복구 및 최적화하려는 경우 명령 행에서 한 번에 수행 할 수 있습니다. 그래도 루트가 필요합니다.

mysqlcheck -u root -p --auto-repair --optimize --all-databases

일단 실행하면 MySQL 루트 암호를 입력하라는 메시지가 표시됩니다. 그런 다음 시작되고 결과가 표시됩니다.

출력 예 :

yourdbname1.yourdbtable1       OK
yourdbname2.yourdbtable2       Table is already up to date
yourdbname3.yourdbtable3
note     : Table does not support optimize, doing recreate + analyze instead
status   : OK

etc..
etc...

Repairing tables
yourdbname10.yourdbtable10
warning  : Number of rows changed from 121378 to 81562
status   : OK

루트 비밀번호를 모르고 WHM을 사용하는 경우 홈> SQL 서비스> MySQL 루트 비밀번호 로 이동하여 WHM 내에서 변경할 수 있습니다.