SQL引起性能问题归类能耗
作者:郭同学 时间:2016-12-02 09:28:00
应用开发抱怨数据库低效处理时,大多数实际情况是低效的设计导致低效的数据处理。在谈论性能优化时,针对SQL 问题,一部分是低效或无索引导致。另一部分是SQL 语句本身引起性能问题。做DBA 业务逻辑不熟悉的情况下,进行sql语句优化需要大量的精力。我们可以把sql语句引起性能问题进行分类,一部分是和业务逻辑有关,另一部分是和业务逻辑无关。 针对业务逻辑无关部分,我们容易独立入手优化,优化成本相对较低。针对业务逻辑有关部分,我们必须和开发人员沟通,协同合作,筛选有用信息,尝试优化,优化成本较高。
针对业务逻辑无关,能否例举或者总结一些经常出现写法问题的sql语句,我们可以根据这些例子进行举一反三或者可以形成解决问题的模板。
例如:
整型隐式转换成字符型 sql语句: select * from t1 where id=‘1’
使用函数谓词导致没走索引 sql语句: select * from t1 where char(id)=1
谓词匹配的字符型长度不一致 sql语句: select * from t1,t2 where t1.name=t2.name {t1.name char(4) t2.name char(8)}
针对业务逻辑有关部分,例举案例总结一些经常出现问题的sql,例如:减少不必要的查询字段、等。
还请专家归类解答,总之SQL性能优化问题多多,若按类加以归纳总结,我们就能快速学习前人经验,站在巨人的肩膀上,我们看的更远。
这个问题要解答得比较全面的话,需要平时的收集和整理。具体的SQL是举不出例子了。
我印象比较深的会导致性能问题的写法有以下一些:
1、关联条件中使用量的函数。而且两个表的关联字段都用了函数。
2、关联条件中使用了OR语句。
3、隐性的类型转换。
4、在SELECT里面用了大量的标量子查询。
以后想到还可以补充。总之,SQL是一个比较灵活的语言,很难用一个固定的条条框框去规定到底哪些SQL是好的哪些是差的。大部分时候只能依赖于开发人员对SQL的掌握程度了。