-
使用合适的数据类型。例如对字符串使用 varchar 而不是 char, 使用 unsigned 整型可以节省存储空间。还有比如 DECIMAL 这种可以满足精度值的数据结构
-
使用连接 (join) 时注意其执行效率,景仿合适的连接类型,并尽量在连接条件中使用索引LEFT JOIN 左连接, 表 1 左连接表 2, 以表 1 为主,关联上表 2 的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。RIGHT JOIN 右连接 和上面相反。
-
在查询中避免使用 (select *) 和函数,这会降低查询速度,同时也要避免过多 join 查询。可以适当冗余一些数据来优化查询。
-
使用模型结构来组织代码,将模型、控制器、路由等分离开来,保持代码整洁。
-
设置适当的数据库连接池容量,不要让连接池溢出或耗尽,定期使用连接池回收功能来维护连接池健康,合理设置连接池空闲超时,不要让大量连接长时间空闲。
-
用事务来执行相关的数据库操作,保证数据一致性。
-
使用预编译语句 (Prepared Statements) 来防止 SQL 注入攻击。避免 N+1 问题,使用预加载 (Preload) 和关联预加载 (Associations Preload) 来优化查询。
-
用索引来优化慢查询,及时关注和优化慢查询日志。
-
分页查询时注意效率,尽量在数据库层面完成分页。
直接使用 Limit 和 Offset 手动给它分个页
如果用 Gorm 的话可以直接参考这篇 gorm.io/docs/scopes…
-
使用日志功能调试程序,打印执行的 SQL 语句来 analyze。
-
使用测试 database 来运行自动化测试,不要直接用线上数据库。
-
启用 charset、parseTime 等参数,避免字符集和时间格式错误。