15.3 优化数据库结构
15.3.1 将字段很多的表分解成多个表
将表拆分成多个表,分为常用字段与非常用字段,都用到时使用连接(JOIN)查询
15.3.2 增加中间表
适当增加中间表做关联,提高查询速度
15.3.3 增加冗余字段
适当增加冗余字段,可以加快查询速度,减少连接查询
15.3.4 优化插入记录的速度
对于
MyISAM引擎的表常见方法如下:禁用索引
批量插入时候,创建索引会降低插入记录的速度,建议插入前先禁用索引,等插入完成后在开启索引
// 禁用索引 ALTER TABLE table_name DISABLE KEYS; // 重新开启索引 ALTER TABLE table_name ENABLE KEYS;备注:table_name表示表名
禁用唯一性检查
插入时,会对唯一性进行校验
// 禁用唯一性检查 SET UNIQUE_CHECKS = 0; // 开启唯一性检查 SET UNIQUE_CHECKS = 1;使用批量插入
插入语句合并,多条
INSERT INTO合并成一条INSERT INTO使用
LOAD DATA INFILE批量导入批量导入时候,能用
LOAD DATA INFILE就尽量使用,导入方式比INSERT快
对于
InnoDB引擎的表,常见优化方式如下禁用唯一性检查
同
MyISAM引擎方法// 禁用唯一性检查 SET UNIQUE_CHECKS = 0; // 开启唯一性检查 SET UNIQUE_CHECKS = 1;禁用外键检查
// 禁用 SET foreign_key_checks=0; // 启用 SET foreign_key_checks=1;禁止自动提交
禁止事务的自动提交
// 禁用 SET autocommit=0; // 启用 SET autocommit=1;
15.3.5 分析表、检查表和优化表
分析表:
语法:
备注:
LOCAL和NO_WRITE_TO_BINLOG任选一个即可,都是相同含义备注2:结果分析:
Table:表示分析的表的名称
Op:表示执行的操作,analyze表示进行分析操作
Msg_type:表示信息类型,其值通常是状态(status)、信息(info)、注意(note)、警告(warning)和错误(error)之一
Msg_text:显示信息检查表:
用来检查
InnoDB引擎和MyISAM引擎的表是否存在错误,对于MyISAM引擎表还有修改表的作用语法:
备注:
option只对MyISAM引擎的表有效,各选项意义如下:
QUICK:不扫描行,不检查错误的连接
FAST:只检查没有被正确关闭的表
CHANGED:只检查上次检查后被更改的表和没有被正确关闭的表
MEDIUM:扫描行,已验证被删除的连接是有效的,也可以计算各行的关键字校验和,并使用计算出的校验合验证这一点
EXTENDED:对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间比较长优化表
使用
OPTIMIZE TABLE语句优化表,该语句对InnoDB引擎和MyISAM引擎的表都有效,但只优化VARCHAR、BLOB和TEXT语法:
备注:
LOCAL和NO_WRITE_TO_BINLOG意义相同,指定不写入二进制日志
最后更新于
这有帮助吗?