首要原则:语句尽量简单,不在数据库做复杂运算,不用存储过程、函数
数据库难于扩展,扩展能力远不如APP。
大消耗性能的SQL很容易对其他SQL产生影响。
MySQL优化器不足,处理复杂SQL时容易选择错误执行计划;
MySQL没有SQL级并行、HashJoin、分析函数等特性,处理复杂SQL能力不强;在高并发的系统中,复杂SQL容易产生锁问题
复杂SQL可拆分多个简单SQL
select,insert一定要带上字段名,尽量少用select *
select的数据长度可以影响order by排序算法。
增删字段对程序的影响。
如果有大字段select真正需求的字段可以节省网络IO开销。
优化LIMIT分页:不要用LIMIT start, offset,更高效方法可以找dba
select * from user limit 100000,1 对于MySQL来讲是:先扫描100000行丢弃掉,再读取一行。因此,不建议使用这种写法来分页。
不要在where语句后的索引列做运算或表达式,会导致用不了索引,示例如下:
禁用select for update、insert……select from、select *(必须明确给出需要字段)、insert TB values……(必须明确给出字段)、order by rand()语法。
它会扩大意向锁范围,较大程度影响数据库的并发事务效率;
只用inner join或者left join;禁止用right join。表关联的on必须有索引,只关联需要表,只选择需要的列
复杂查询拆分简单查询;尽量小批量小语句分段执行;一个sql不要超过1G的binlog
拒绝3大类型sql:
1大SQL (BIG SQL) 2大事务 (BIG Transaction) 3大批量 (BIG Batch) 。合理拆分sql。
小语句小事务好处:减少锁、用上多cpu,缓存命中率高
大事务可以set auto_commit =0 关闭自动提交,但是拒绝滥用,会导致阻塞
注意SQL语句中数据类型隐式转换的问题
查询条件中使用‘’可能导致类型转换无法使用索引,比如:int_col=‘0’,会导致隐式转换无法正常使用索引
SQL规范
更新时间 2025-06-17 11:00:37
最近更新时间: 2025-06-17 11:00:37
本文为您介绍开发过程中的SQL规范。