意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

论sql优化

来源:恒创科技 编辑:恒创科技编辑部
2023-12-22 07:06:59


相信有过和数据库进行对接,交互的工作经历的朋友都知道,sql的执行效率直接决定整体系统的运行效率。性能不够理想的系统中处理一部分是由于应用的访问量,高并发产生导致服务器负载过高原因,其还有一个原因就是Sql语句不够规范,不够专业,存在可优化空间。


论sql优化

那么如何判断sql语句是否需要优化呢?

使用SET STATISTICS IO命令就可以得到SQL语句的logical reads 信息

如果logical reads很大,但是所查询出来的数据行数很少,那么就需要优化sql了

那么在千万级别数据量中,一条精简的sql语句会使得整体的数据库交互执行效率事半功倍。

一般来说,常用的sql语句简化方式中存在以下:

1.多表操作是最好不要超过5个table的联合操作。(JOIN)

2.区分冷数据和热数据(例如登录操作,长达1年以上没有活跃用户信息可以转化为冷数据,减少数据匹配负担)

3.考虑使用临时表存储临时数据。

4.尽量使用联合查询来替代子查询(例如JOIN )

限制返回结果集

在查询数据库的时候,需要严格考虑结果集的行数和字段列数。性能较差的一条sql语句就是:

SELECT * FROM table_name ;

这条语句所带来的弊端将很容易导致并发问题出现,即使很小,严重的话会倒是数据库崩溃。

不但会产生严重的磁盘IO现象,更加会导致把缓存中数据替换,导致下次使用必须再次读取并缓存。

所以一个良好的SQL语句必须存在条件限制结果集大小(WEHERE、TOP语句)。

规范table结构设计

不一定需要其非常范式化,但是需要有一定的数据冗余存在,提高sql语句的执行效率,降低联合查询的数量。

分离联机事务处理模块和联机分析处理模块

例如基本的事务处理和复杂的分析处理两种数据库操作执行效率不同,分离的话讲大幅提升整体系统执行效率。

索引查询:分为单索引,组合索引,覆盖索引

单索引也就是最简单是简单条件查询,而组合索引就是在WHERE语句或者能够有多个字段,那么就可以考虑创建组合索引。在组合索引中,条件是顺序也很重要,如果约束力越强的字段越是应该靠前。在其中,无论是单索引还是组合索引,尽量不要选择唯一性很低的字段,例如,在一个boolean类型的字段上,只有true和false两种选择,那么这个索引没有特别大的执行意义。覆盖索引能够使得语句不需要访问表仅仅访问索引就能过得到所有需要的数据。

上一篇: mysql 锁机制 下一篇: sql语句--去除字段中的空格