MySQL Optimization Tips
数据库 2020年6月28日
数据库设计
1. 对非频繁更新数据可适度冗余;
2. 为常用查询列添加索引,为连接查询两表中链接列添加索引,且保证两列数据类型一致;
3. 对表进行水平或垂直划分;
4. 选择适当字段类型,选择合适数据引擎;
5. 优先采用批量操作,避免频繁读写操作;
6. 使用 PROCEDURE ANALYSE() 分析已有实际数据表,为优化表结构提供参考;
7. IP 值以 INT UNSIGNED 类型存储,相关函数:
# MySQL
mysql> SELECT INET_ATON('xxx.xxx.xxx.xxx');
mysql> SELECT INET_NTOA(xxxxxxxx);
// PHP
ip2long ( string $ip_address ) : int
long2ip ( int $proper_address ) : string
查询语句优化
1. 使用 EXPLAIN 优化数据库索引及查询;
2. 开启慢查询日志,配置 my.cnf,[mysqld] 之下新增:
slow_query_log=1
slow_query_log_file=/var/log/mariadb/slow_query.log
long_query_time=3
使用 mysqldumpslow 分析慢查询日志;
3. 使用预处理语句,优化性能及防止 SQL 注入;
4. 使用 MySQL 事物保证数据完整性;
5. 使用 MySQL 存储过程封装复杂逻辑。
架构优化
1. 使用主从复制,写入/更新操作主服务器,查询操作从服务器,达到读写分离。