Typecho 数据库优化
本文主要适用于从老版本升级上来的 Typecho,做一下数据库优化提高查表速度,顺便让 blog 支持一下 Emoji
数据表引擎
1.2 以上版本一律建议 InnoDB,新版本 InnoDB 查表效率比 MyISAM 强很多,在我的机器上,查表能快 10ms 左右
旧版本 InnoDB 反而会比 MyISAM 慢
InnoDB vs MyISAM
InnoDB | MyISAM |
---|---|
支持事务处理等 | 不支持事务处理等 |
不加锁读取 | |
支持外键 | 不支持外键 |
支持行锁 | 不支持行锁 |
不支持FULLTEXT类型的索引 | 支持FULLTEXT类型的索引 |
不保存表的具体行数,扫描表来计算有多少行 | 保存表的具体行数,不带where时,直接返回保存的行数。 |
DELETE表时,是一行一行地删除 | DELETE表时,先drop表,然后重建表 |
InnoDB把数据和索引存放在表空间里面 | MyISAM表被存放在三个文件,frm文件存放表格定义 |
跨平台可直接拷贝使用 | 跨平台很难直接拷贝。 |
InnoDB中必须包含AUTO_INCREMENT类型字段的索引表格很难被压缩 | MyISAM中可以使用AUTO_INCREMENT类型字段建立联合索引,表格可以被压缩。 |
转换方法
将 MyISAM 转换为 InnoDB 的方法:
可以使用下面的命令,或者使用 PHPMyAdmin 等工具
1 |
|
将 blog_metas
替换为你 Typecho 的数据表,分别将每个数据表都转换为 InnoDB,转换完成后修改配置文件 config.inc.php
,开启 InnoDB
1 |
|
将 engine 修改为 InnoDB
排序规则 & 字符集
老版本默认的字符集是 utf8
,这个字符集是不支持 ?emoji 和部分生僻字的,建议修改为 utf8mb4
,同时将排序规则修改为 utf8mb4_0900_ai_ci
修改字符集的命令:
1 |
|
PHPMyAdmin: