GreensnoWorld
记录点滴,分享乐趣,一块凝固的时间
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. 使用主从复制,写入/更新操作主服务器,查询操作从服务器,达到读写分离。

LIJG
余本顽劣,生于紫云下,长于汝水滨。早年求学,兴趣广泛,好高骛远,学无所成,仓皇入世。兴趣所致,投身互联网,求知未证,而立已至,始悟光阴荏苒,终需务实钻研。故有此站,记录时光,积累点滴,验证所学,分享愚见。指舞方寸间,心系万千年。
留言