sql语句优化(一)

       还记中学的时的一首诗中说:毕竟西湖六月中,风光不与四时同。真的与专业有关吧,对文字或多或少的敏感。开始言归正传,六月的西湖中荡漾着航行的小船,做一个项目对数据查询要求相对比较高的项目。 

       此次讨论的数据库sql也便是基于这个源头,在项目中听到比较多的查询速度慢,做压力测试几万数据就要开始崩溃。这样是必用户体验会不好对吧,也是程序不能接受的事情,那么我们就会想到要去优化。

       关于数据库、sql的优化,大家想到有几种方法呢?这里,小编提供三个思路,不全面相信大家还会有更好的。

       思路:1)sql语句中不要出现*,除非有特殊的需求,用?代替字符串拼接;

                 2)建分区;

                 3)建索引。

       下面呢,小编和大家一起看看基于Oracle数据库“用?代替字符串拼接”为什么能提高查询效率?

        首先,我们知道sql执行的过程:语法检查、分析、执行、返回结果。任何在应用程序把查询sql发送到服务器端,服务器在接收到sql之后不会马上去数据库查询,而是在在数据库的缓存中是否有相应的执行计划,如果有则直接用编译好的sql执行,这样就节省了编译时间。

        由此,我们也引进两个概念,sql的解析中的硬解析和软解析。硬解析:是指对应用程序传到服务器的sql进行语法、语义、权限等方面的分析;软解析:简单地说SQL语句存在于librarycache中,可以直接用,不需要硬解析。

     这样,我们就比较好分析用?代替字符串拼接”为什么能提高查询效率。

<pre name="code" class="sql">select a from Table where ID = '" + id +"'
select a from Table where ID = ‘123’
select a from Table where ID = ‘456’

     大家可以看到上面一条sql用字符串方式拼接,接下来时两个不同参数的两条sql语句,对Oracle数据库来说,这次两条完全不同sql,都需要进行硬解析,这样只要参数不同都要硬解析一次必然会影响效率。因为oracle会根据sql语句的文本去计算每个字符在内存里的hash值,因此虽然上述两条SQL只有一个字符不一样,oracle根据hash算法在内存中得到的hash地址就不一样,所以oracle就会认为这是两条完全不同的语句。 

Select a from Table where ID = ?
service.excuteQuery(sql.toString(), new Object[]{ID });
    然而,如果是用"?"代替参数位,用传参的方式写sql的话,sql只需要硬解析一次,这样能在一定程度上提高查询的效率,特别是当参数比较多的时候。

    sql的优化,对IT职业要说很普遍,与大家一起学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值