数据库优化是每个开发者都要面对的实际问题。今天咱们就像师傅带徒弟一样,聊聊 MySQL 查询优化和备份恢复那些事儿。
先说查询优化。很多新手写 SQL 只关心能不能查出结果,却不关心查得快不快。你得养成看执行计划的习惯,用 EXPLAIN 关键字放在查询语句前面,就能看到 MySQL 是怎么执行这条 SQL 的。重点看 type 这一列,如果是 ALL 说明在全表扫描,这时候就要考虑加索引了。索引不是越多越好,但查询频繁的字段一定要加。比如用户表经常按手机号查询,就给手机号字段加个索引,创建索引的命令是 CREATE INDEX idx_phone ON users(phone)。但要注意,索引会降低写入速度,所以别滥用。
查询语句本身也有讲究。能用 SELECT 指定字段就别用 SELECT 星号,只取需要的列能减少数据传输。JOIN 操作时,确保关联字段都有索引,而且数据类型要一致。子查询能改成 JOIN 就尽量改,因为 MySQL 对 JOIN 的优化更成熟。还有个小技巧,用 LIMIT 限制返回行数,特别是在做分页查询的时候,别一次性把几万条数据都拉出来。
再说备份恢复,这是保命的本事。最简单的备份是用 mysqldump 命令,比如 mysqldump -u root -p database_name > backup.sql 就能把整个数据库导出成 SQL 文件。建议加上 single-transaction 参数,这样备份过程中不会锁表,不影响业务。恢复的时候更简单,mysql -u root -p database_name < backup.sql 就能把数据导回去。但要注意,恢复前最好先备份当前数据,防止操作失误。
自动化备份很重要,别指望自己天天记得手动备份。写个 shell 脚本,用 crontab 设置每天凌晨执行,备份文件按日期命名,保留最近七天的就够了。脚本里记得把密码写进配置文件而不是直接写在命令里,安全第一。
最后提醒一句,优化之前先监控,用 slow_query_log 记录慢查询,找出真正有问题的语句再优化,别瞎折腾。数据库这东西,稳定比什么都重要。