数据库优化是每个开发者都要面对的问题,今天咱们就像师徒聊天一样,把 MySQL 优化的核心要点捋一捋。
先说查询优化。很多新手写 SQL 只管能跑就行,殊不知一条烂查询能拖垮整个系统。记住第一条铁律:能走索引的绝不让它全表扫描。比如你经常按用户 ID 查订单,那 order 表的 user_id 字段必须加索引。创建索引很简单,执行 CREATE INDEX idx_user_id ON orders(user_id); 但别乱加,索引多了写入会变慢。第二条铁律是避免 SELECT *,只取需要的字段。你想想,一个表几十列,你只用其中三列,何必让数据库把整行数据都读出来?写成 SELECT id, user_id, amount FROM orders 就好。第三条是善用 EXPLAIN 分析查询计划,执行 EXPLAIN SELECT * FROM orders WHERE user_id = 1; 看看 type 字段,如果是 ALL 说明在全表扫描,赶紧优化。
再说慢查询日志。MySQL 自带这个功能,打开它就能抓到那些拖后腿的 SQL。在配置文件里加 slow_query_log = 1 和 long_query_time = 2,超过两秒的查询都会被记录下来。定期看看这个日志,把最慢的几条拎出来优化,效果立竿见影。
表结构设计也有讲究。能拆的表就拆开,比如用户表和订单表分开,别把所有信息塞一张表里。字段类型能小则小,int 够用就别用 bigint,varchar 长度设合理些。这些细节积累起来,性能提升很明显。
最后说说备份恢复,这可是保命的本事。最基础的备份用 mysqldump,执行 mysqldump -u root -p database_name > backup.sql 就能导出整个数据库。恢复的时候用 mysql -u root -p database_name < backup.sql。但生产环境建议用二进制日志做增量备份,配合全量备份,能把数据丢失风险降到最低。记得把备份脚本加到 crontab 里,每天凌晨自动执行,备份文件传到远程服务器,别只放在本地。
优化数据库不是一蹴而就的事,平时多监控慢查询,定期分析索引使用情况,养成好习惯比临时救火重要得多。