初级程序员必备的十大技能之数据库基础(四)

简介: 教程来源 http://xgmoi.cn/ 本节聚焦MySQL性能优化与安全运维:通过慢查询日志定位瓶颈,结合SQL写法优化(如避免SELECT*、善用EXPLAIN)、索引与分区设计提升查询效率;同时涵盖权限管控、mysqldump备份恢复及自动化策略,兼顾性能与可靠性。

六、性能优化:让查询飞起来

6.1 慢查询日志

-- 开启慢查询日志(MySQL)
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 2;  -- 超过2秒的查询
SET GLOBAL log_queries_not_using_indexes = ON;  -- 记录未使用索引的查询

-- 查看慢查询日志位置
SHOW VARIABLES LIKE 'slow_query_log_file';

6.2 SQL 优化技巧

-- 1. 只查需要的列(不要 SELECT *)
-- ❌ 差
SELECT * FROM users WHERE age > 18;
-- ✅ 好
SELECT id, username, email FROM users WHERE age > 18;

-- 2. 用 LIMIT 限制返回行数
SELECT * FROM logs ORDER BY id DESC LIMIT 100;

-- 3. 用 EXISTS 代替 IN(子查询结果集大时)
-- ❌ 差
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
-- ✅ 好
SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);

-- 4. 批量操作
-- ❌ 差:1000次单独插入
INSERT INTO users (name) VALUES ('张三');
INSERT INTO users (name) VALUES ('李四');
-- ✅ 好:1次批量插入
INSERT INTO users (name) VALUES ('张三'), ('李四');

-- 5. 避免使用 SELECT DISTINCT
-- 很多时候可以用 GROUP BY 代替
SELECT DISTINCT user_id FROM orders;  -- 可能慢
SELECT user_id FROM orders GROUP BY user_id;  -- 可能更快

-- 6. 优化分页查询(深分页问题)
-- ❌ 差:OFFSET 越大越慢
SELECT * FROM orders ORDER BY id LIMIT 1000000, 10;
-- ✅ 好:记住上一页的最大ID
SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;

6.3 数据库结构优化

-- 1. 分区表(适合大数据量)
CREATE TABLE logs (
    id INT,
    log_date DATE,
    content TEXT
) PARTITION BY RANGE (YEAR(log_date)) (
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);

-- 2. 分表策略
-- 水平分表:按用户ID哈希,分成 user_0, user_1, user_2...
-- 垂直分表:把不常用的列拆分到另一张表

-- 3. 使用覆盖索引
-- 索引包含了查询需要的所有列,不需要回表
CREATE INDEX idx_name_age ON users(name, age);
SELECT name, age FROM users WHERE name = '张三';  -- 覆盖索引,快

七、数据库安全与备份

7.1 用户权限管理

-- 创建用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password';

-- 授予权限
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost';
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'%' WITH GRANT OPTION;

-- 撤销权限
REVOKE DELETE ON mydb.* FROM 'app_user'@'localhost';

-- 查看权限
SHOW GRANTS FOR 'app_user'@'localhost';

-- 删除用户
DROP USER 'app_user'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

7.2 备份与恢复

# 1. 使用 mysqldump 备份
# 备份整个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > all_backup.sql

# 备份特定表
mysqldump -u root -p mydb users orders > users_orders_backup.sql

# 只备份结构,不备份数据
mysqldump -u root -p --no-data mydb > mydb_structure.sql

# 只备份数据,不备份结构
mysqldump -u root -p --no-create-info mydb > mydb_data.sql

# 2. 恢复备份
mysql -u root -p mydb < mydb_backup.sql

# 3. 定时备份(使用 cron)
# 每天凌晨2点备份
0 2 * * * mysqldump -u root -p mydb > /backups/mydb_$(date +\%Y\%m\%d).sql

附:知识体系总结

数据库基础
├── SQL 语言
│   ├── DDL: CREATE, ALTER, DROP
│   ├── DML: INSERT, UPDATE, DELETE
│   └── DQL: SELECT (WHERE, JOIN, GROUP BY, HAVING, ORDER BY)
├── 表设计
│   ├── 数据类型选择
│   ├── 约束 (主键、外键、唯一、检查)
│   ├── 三大范式
│   └── 索引设计
├── 性能优化
│   ├── 索引优化(最左前缀、覆盖索引)
│   ├── SQL 优化(避免函数、类型转换、SELECT *)
│   └── 执行计划分析 (EXPLAIN)
├── 事务
│   ├── ACID
│   ├── 隔离级别
│   └── 锁机制
└── 管理
    ├── 用户权限
    └── 备份恢复

来源:
http://amwtm.cn/

相关文章
|
16天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23521 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1303 7
|
5天前
|
人工智能 BI 持续交付
Claude Code 深度适配 DeepSeek V4-Pro 实测:全场景通关与真实体验报告
在 AI 编程工具日趋主流的今天,Claude Code 凭借强大的任务执行、工具调用与工程化能力,成为开发者与自动化运维的核心效率工具。但随着原生模型账号稳定性问题频发,寻找一套兼容、稳定、能力在线的替代方案变得尤为重要。DeepSeek V4-Pro 作为新一代高性能大模型,提供了完整兼容 Claude 协议的 API 接口,只需简单配置即可无缝驱动 Claude Code,且在任务执行、工具调用、复杂流程处理上表现极为稳定。
1405 3
|
10天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2556 4
|
3天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
975 0
|
20天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
6082 22
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
21天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
7345 18