MySQL 数据库设计及性能优化Tips

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。

注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽然在一般情况下,查询性能比InnoDB高,但InnoDB的以主键为条件的查询性能是非常高的。

继续阅读“MySQL 数据库设计及性能优化Tips”

修改数据库、表、字段为 utf8mb4 编码

创建 utf8mb4 数据库:

修改数据库、表、字段为 utf8mb4 编码:

 

MySQL 配置文件 my.cnf 详细说明

本文记录MySQL配置文件my.cnf的详细说明。

Linux系统MySQL配置文件读取顺序

文件名字 作用
/etc/my.cnf 全局配置
/etc/mysql/my.cnf 全局配置
SYSCONFDIR/my.cnf 全局配置
$MYSQL_HOME/my.cnf Server-specific 服务器特定的选项 (仅适用于服务端)
defaults-extra-file 如果有的话指定该文件--defaults-extra-file=文件名字
~/.my.cnf Server-specific 服务器特定的选项
~/.mylogin.cnf User-specific 登录路径选择 (仅适用于客户端)

继续阅读“MySQL 配置文件 my.cnf 详细说明”

MySQL大表加字段思路

给 MySQL 一张表加字段执行如下 sql 就可以了:

但是线上的一张表如果数据量很大呢,执行加字段操作就会锁表,这个过程可能需要很长时间甚至导致服务崩溃,那么这样操作就很有风险了。

继续阅读“MySQL大表加字段思路”

Mysql性能优化–Explain详解

EXPLAIN

mysql explain命令是查询性能优化不可缺少的一部分。

explain output columns

列名 说明
id 执行编号,标识select所属的行。如果在语句中没有子查询或者关联查询,只有唯一的select,每行都将显示1。否则,内层的select语句一般会顺序编号,对应于其在原始语句中的位置
select_type 显示本行是简单或是复杂select。如果查询有任何复杂的子查询,则最外层标记为primary(derived、Union、Union resuit)
table 访问引用哪个表(引用某个查询,如“derived3”)
partitions 匹配的分区
type 数据访问/读取操作类型(all、index、range、ref、eq_ref、const/system、NULL)。join类型
possible_keys 揭示哪一些索引可能有利于高效的查找
key 此次查询中确切使用到的索引.
key_len 显示mysql在索引里使用的字节数
ref 哪个字段或常数与key一起被使用
rows 为了找到所需的列而需要读取的行数,估算值,不精确。通过把所有rows列值相乘,可粗略估算整个查询会检查的行数
filtered 表示此查询条件所过滤的数据的百分比
Extra 额外信息,如using index、filesort等

继续阅读“Mysql性能优化–Explain详解”

常用Linux操作数据库命令及MySQL语句

以下是在Linux下经常会用到的MySQL的一些命令,导出,导入,建库建表,备份,以及MySQL修改字段,添加字段等语法。

数据库表导入

恢复sql到数据库,不会覆盖数据库,仅执行恢复的sql语句,常用于数据库表的导入:

继续阅读“常用Linux操作数据库命令及MySQL语句”