MySQL - OPTIMIZE TABLE 语句
当我们对现有表执行多项更改(例如插入、更新、删除等)时,表的物理存储会发生变化,从而导致性能下降。
MySQL OPTIMIZE TABLE 语句
MySQL OPTIMIZE TABLE 语句可以帮助您优化表存储空间。它以一种提高输入输出效率并减少存储空间的方式重新组织存储数据。要执行此语句,您需要 SELECT 和 INSERT 权限。
语法
以下是 MySQL OPTIMIZE TABLE 语句的语法 -
OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...
示例
假设我们使用如下所示的 CREATE 语句创建了一个名为 EMPLOYEE 的表 -
CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT );
如果我们使用 INSERT 语句向其中插入 4 条记录,如下所示 -
INSERT INTO EMPLOYEE VALUES ('Krishna', 'Sharma', 19, 'M', 2000), ('Raj', 'Kandukuri', 20, 'M', 7000), ('Ramya', 'Ramapriya', 25, 'F', 5000), ('Mac', 'Mohan', 26, 'M', 2000);
现在,让我们将所有男性员工的年龄增加一岁 -
UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M'; Rows matched: 3 Changed: 3 Warnings: 0
并且,以下语句将从上述表中删除记录 -
DELETE FROM EMPLOYEE WHERE FIRST_NAME = 'Mac';
以下查询优化了上述创建的表 -
OPTIMIZE TABLE EMPLOYEE\G;
输出
上述查询产生以下输出 -
************ 1. row ************ Table: mydb.employee Op: optimize Msg_type: status Msg_text: OK 2 rows in set (2.74 sec)
分析多个表
您还可以使用 OPTIMIZE TABLE 语句优化多个表并获取结果。
示例
假设我们创建了三个新表,如下所示 -
CREATE TABLE Test1(ID INT, Name VARCHAR(255)); CREATE TABLE Test2(ID INT, Name VARCHAR(255)); CREATE TABLE Test3(ID INT, Name VARCHAR(255));
以下查询优化所有这些表并显示结果 -
OPTIMIZE TABLE Test1, Test2, Test3\G;
输出
以下是上述查询的输出 -
********** 1. row ********** Table: mydb.test1 Op: optimize Msg_type: note Msg_text: Table does not support optimize, doing recreate + analyze instead ********** 2. row ********** Table: mydb.test1 Op: optimize Msg_type: status Msg_text: OK ********** 3. row ********** Table: mydb.test2 Op: optimize Msg_type: note Msg_text: Table does not support optimize, doing recreate + analyze instead ********** 4. row ********** Table: mydb.test2 Op: optimize Msg_type: status Msg_text: OK ********** 5. row ********** Table: mydb.test3 Op: optimize Msg_type: note Msg_text: Table does not support optimize, doing recreate + analyze instead ********** 6. row ********** Table: mydb.test3 Op: optimize Msg_type: status Msg_text: OK 6 rows in set (4.52 sec)
mysql_statements_reference.html