如何优化sql

一、表的设计优化

参考阿里开发手册(嵩山版)

1、设置合适的数值(tinyint、int、bigin),要根据实际情况选择。

2、设置合适的字符串类型(char 和 varchar),char 定长效率高,varchar 可变长度,效率稍低

二、索引优化

参考优化创建索引原则索引创建的原则-CSDN博客与索引失效博客:什么情况下索引会失效-CSDN博客

三、SQL 语句优化

1、SELECT 语句务必指明字段名称(避免直接使用 select *)

2、SQL 语句要避免造成索引失效的写法

3、尽量用 union all 代替 union,union 会多一次过滤,效率低

4、避免在 WHERE 子句中对"索引列"进行表达式操作,会导致索引失效

5、Join 优化,能用 innerjoin 就不要用 left join、right join,如果必须使用,必须以小表为驱动,对于 LEFT JOIN,小表应该放在左边(左表当驱动)、对于 RIGHT JOIN,小表应该放在右边(右表当驱动),节约I/O(磁盘/内存读取)和 CPU 比较次数。innerjoin内连接会对两个表进行优化,优先把小表放到外边,把大表放到里面。而 left join 或 right join,不会调整顺序。

四、主从复制、读写分离

如果数据库的使用场景读的操作比较多的时候,为了避免写的操作所造成的性能影响。可以采用读写分离的架构。读写分离可以解决因为数据库的写入而导致的查询效率降低。

五、分库分表

篇幅较长,可参考分库分表博客:详解分库分表-CSDN博客

相关推荐
李白客33 分钟前
AI 数据库落地 NL2SQL:准确率卡在四成,问题在表注释不在模型
数据库
十碗饭吃不饱41 分钟前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
FluxDB42 分钟前
FluxDB vs DBX vs DBeaver:GPUI、Tauri、Eclipse 三种技术栈实测
数据库·mysql
T_Wizard1 小时前
后端转 AI 应用开发,我先把这 12 个名词理清了:一张图看懂架构、RAG、Tool Calling 与 MCP
java·ai编程
杨航 AI1 小时前
JEV的用法
java·前端·数据库
灿飞1 小时前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin
知识搬运临时工1 小时前
JVM 删掉偏向锁之后,一次无竞争锁从 0.3 纳秒变成 5.4 纳秒
java
数据库小学妹1 小时前
MySQL分页结果不稳定:唯一键兜底与游标分页
数据库·mysql·dba
IT枫斗者枫哥1 小时前
用了BigDecimal还差一分?用四组Java代码查清原因
java·后端
风翼靓崽2 小时前
mysql数据备份/恢复
数据库·mysql