mysql表维护语句_Mysql维护语句

MySQL的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为“散列程度”),它表示某个索引对应的列包含多少个不同的值——如果cardinality大大少于数据的实际散列程度,那么索引就基本失效了。

我们可以使用SHOW INDEX语句来查看索引的散列程度:

SHOW INDEX FROM PLAYERS;

TABLE KEY_NAME COLUMN_NAME CARDINALITY

-------- ----------- -----------

PLAYERS PRIMARY PLAYERNO 14

因为此时PLAYER表中不同的PLAYERNO数量远远多于14,索引基本失效。

下面我们通过Analyze Table语句来修复索引:

ANALYZE TABLE PLAYERS;

SHOW INDEX FROM PLAYERS;

结果是:

TABLE KEY_NAME COLUMN_NAME CARDINALITY

-------- ----------- -----------

PLAYERS PRIMARY PLAYERNO 1000

此时索引已经修复,查询效率大大提高。

需要注意的是,如果开启了binlog,那么Analyze Table的结果也会写入binlog,我们可以在analyze和table之间添加关键字local取消写入。

Checksum Table

数据在传输时,可能会发生变化,也有可能因为其它原因损坏,为了保证数据的一致,我们可以计算checksum(校验值)。

使用MyISAM引擎的表会把checksum存储起来,称为live checksum,当数据发生变化时,checksum会相应变化。

在执行Checksum Table时,可以在最后指定选项qiuck或是extended;qiuck表示返回存储的checksum值,而extended会重新计算checksum,如果没有指定选项,则默认使用extended。

Optimize Table

经常更新数据的磁盘需要整理碎片,数据库也是这样,Optimize Table语句对MyISAM和InnoDB类型的表都有效。

如果表经常更新,就应当定期运行Optimize Table语句,保证效率。

与Analyze Table一样,Optimize Table也可以使用local来取消写入binlog。

Check Table

数据库经常可能遇到错误,譬如数据写入磁盘时发生错误,或是索引没有同步更新,或是数据库未关闭MySQL就停止了。

遇到这些情况,数据就可能发生错误:

Incorrect key file for table: ' '. Try to repair it.

此时,我们可以使用Check Table语句来检查表及其对应的索引。

譬如我们运行

CHECK TABLE PLAYERS;

结果是

TABLE OP MSG_TYPE MSG_TEXT

----- -------- --------

TENNIS.PLAYERS check status OK

MySQL会保存表最近一次检查的时间,每次运行check table都会存储这些信息:

执行

SELECT TABLE_NAME, CHECK_TIME

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME = 'PLAYERS'

AND TABLE_SCHEMA = 'TENNIS';

结果是

TABLE_NAME CHECK_TIME

-------------------

PLAYERS 2006-08-21 16:44:25

Check Table还可以指定其它选项:

UPGRADE:用来测试在更早版本的MySQL中建立的表是否与当前版本兼容。

QUICK:速度最快的选项,在检查各列的数据时,不会检查链接(link)的正确与否,如果没有遇到什么问题,可以使用这个选项。

FAST:只检查表是否正常关闭,如果在系统掉电之后没有遇到严重问题,可以使用这个选项。

CHANGED:只检查上次检查时间之后更新的数据。

MEDIUM:默认的选项,会检查索引文件和数据文件之间的链接正确性。

EXTENDED:最慢的选项,会进行全面的检查。

Repair Table

用于修复表,只对MyISAM和ARCHIVE类型的表有效。

这条语句同样可以指定选项:

QUICK:最快的选项,只修复索引树。

EXTENDED:最慢的选项,需要逐行重建索引。

USE_FRM:只有当MYI文件丢失时才使用这个选项,全面重建整个索引。

与Analyze Table一样,Repair Table也可以使用local来取消写入binlog。

### 回答1: MySQL是最常用的关系型数据库管理系统之一,可以使用SQL语言来管理和操作数据库。下面是一些常用的MySQLSQL语句。 1. 创建数据库: CREATE DATABASE database_name; 2. 使用数据库: USE database_name; 3. 创建: CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, ... ); 4. 添加主键: ALTER TABLE table_name ADD PRIMARY KEY (column_name); 5. 添加外键: ALTER TABLE table_name ADD CONSTRAINT FK_name FOREIGN KEY (foreign_key_column) REFERENCES parent_table (primary_key_column); 6. 添加索引: CREATE INDEX index_name ON table_name (column_name); 7. 插入数据: INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 8. 更新数据: UPDATE table_name SET column1 = new_value1, column2 = new_value2 WHERE condition; 9. 删除数据: DELETE FROM table_name WHERE condition; 10. 查询数据: SELECT column1, column2, ... FROM table_name WHERE condition; 以上仅是MySQL和数据操作的基本语句,还有许多其他的高级用法和语法,可以根据具体需求进一步学习和掌握。MySQL提供了强大的数据管理功能,使得对数据的存储和查询变得更加高效和方便。 ### 回答2: MySQL是通过使用SQL语句来创建一个新的数据库。下面是一个简单的例子来说明如何使用SQL语句来创建MySQL。 首先,我们需要打开MySQL命令行界面或图形界面工具,然后选择要创建数据库。假设我们已经选择了名为"mydatabase"的数据库。 接下来,我们可以使用CREATE TABLE语句来创建一个新的。以下是一个示例的CREATE TABLE语句: CREATE TABLE mytable ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT, email VARCHAR(100) ); 在上面的示例中,我们创建了一个名为"mytable"的,在该中包含了四个列。第一列是"id",它是整数类型,并且设置为自动增加。它还被指定为主键,这意味着每个条目都有一个唯一的id值。第二列是"name",它是一个可变长度的字符列,最大长度为50个字符。第三列是"age",它是一个整数类型。第四列是"email",它是一个可变长度的字符列,最大长度为100个字符。 CREATE TABLE语句中的其他选项可以根据需要进行更改和添加。例如,我们可以指定列的约束、索引、默认值等。 在完成CREATE TABLE语句后,我们可以执行它来创建新的。然后,我们可以使用ALTER TABLE语句来修改结构,例如添加新的列、删除列或更改列的数据类型。使用INSERT INTO语句可以向中插入数据,使用SELECT语句可以检索中的数据。 总结起来,MySQL的过程包括选择数据库、使用CREATE TABLE语句创建、使用ALTER TABLE语句修改结构(可选)、使用INSERT INTO语句插入数据,以及使用SELECT语句检索数据。 ### 回答3: MySQL是一种广泛使用的关系型数据库管理系统,建是在MySQL中创建数据的过程。建是通过执行SQL语句来实现的。 建的SQL语句包括CREATE TABLE语句和相关的列定义。 CREATE TABLE语句的一般格式如下: CREATE TABLE 名 ( 列名1 数据类型1, 列名2 数据类型2, ... ); 其中,名是我们要创建的数据的名称。列名是数据中的每一列的名称。数据类型定义了每一列所存储的数据的类型,如整数、字符、日期等。 例如,我们要创建一个名为“users”的数据,包含id、name和age三个列,可以使用如下的建语句: CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT ); 上述建语句中,id列使用INT数据类型,示整数,并设置为主键(PRIMARY KEY),同时使用AUTO_INCREMENT属性来自动增加其值。name列使用VARCHAR(50)数据类型,示最大长度为50的字符。age列使用INT数据类型,示整数。 建语句中还可以使用多种约束条件来约束列的取值范围,如NOT NULL示该列不允许为空值,UNIQUE示该列的值是唯一的,DEFAULT示该列的默认值等。 通过执行建语句,我们可以在MySQL中创建一个符合我们需求的数据,供我们存储和管理数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>