- Published on
sql 练习
- Authors

- Name
- MissTree
数据库优化
1.1
数据库设计优化
# 表结构设计
范式化设计:依据数据库范式,合理拆分表,减少数据冗余,提升数据完整性。
例如,在一个电商系统里,把商品信息和商品分类信息分别存于不同表,避免商品分类信息的重复存储。
反范式化设计:在适当的时候,为了提高查询性能,可引入一定的数据冗余。
例如,在一个文章系统中,为了减少关联查询,在文章表中冗余存储作者的部分常用信息。
# 字段类型选择
使用索引:在经常用于查询条件、排序和连接的字段上创建索引。
例如,在 WHERE 子句、JOIN 子句和 ORDER BY 子句涉及的字段上创建索引。
优化查询条件:确保查询条件使用索引,避免在索引字段上使用函数、计算或通配符开头的模糊查询。
例如,避免使用 WHERE YEAR(create_time) = 2024,
可改为 WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01'。
1.2
索引优化
# 合理创建索引
覆盖索引:创建包含查询所需所有字段的索引,避免回表查询。
例如,若查询语句为 SELECT id, name FROM users WHERE age > 18,可创建索引 (age, id, name)。
复合索引:在多个字段上创建复合索引,注意字段顺序,将最常用的字段放在前面。
例如,若经常根据 category_id 和 create_time 查询商品,可创建索引 (category_id, create_time)。
# 定期维护索引
重建索引:定期重建索引,以优化索引结构,提高查询性能。
删除无用索引:删除不再使用的索引,减少索引维护的开销。
1.3
查询语句优化
# 避免全表扫描
使用索引:在经常用于查询条件、排序和连接的字段上创建索引。
例如,在 WHERE 子句、JOIN 子句和 ORDER BY 子句涉及的字段上创建索引。
优化查询条件:确保查询条件使用索引,避免在索引字段上使用函数、计算或通配符开头的模糊查询。
例如,避免使用 WHERE YEAR(create_time) = 2024,
可改为 WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01'。
# 优化关联查询
使用合适的连接类型:依据业务需求选择 INNER JOIN、LEFT JOIN 等连接类型,避免使用不必要的连接。
减少子查询:子查询可能会导致性能问题,尽量用连接查询替代子查询。
1.4
服务器配置优化
# 内存配置
调整 innodb_buffer_pool_size:该参数决定 InnoDB 存储引擎使用的缓冲池大小,合理调整可提高数据读取性能。
一般可将其设置为服务器内存的 70% - 80%。
调整 key_buffer_size:对于 MyISAM 存储引擎,该参数决定索引缓冲区的大小,可根据实际情况进行调整。
# 磁盘 I/O 优化
使用高性能磁盘:如 SSD 磁盘,可显著提高磁盘 I/O 性能。
合理配置磁盘阵列:使用 RAID 技术提高磁盘读写性能和可靠性。
1.5
数据库监控与分析
# 使用 EXPLAIN 分析查询语句
通过 EXPLAIN 关键字分析查询语句的执行计划,了解查询是否使用了索引、扫描的行数等信息,从而进行针对性优化。
# 监控数据库性能指标
使用 MySQL 自带的性能监控工具或第三方监控工具,监控数据库的 CPU 使用率、内存使用率、磁盘 I/O 等指标,
及时发现性能瓶颈并进行优化。