Oracle与Mysql应用总结(in如何与list绑定、Hint使用介绍)

导读:在以前开发的时候,一直在使用oracle,甚至参加过oracle的培训,考过Oracle Database 10g Administrator I,自认对oracle还算有些了解,不过最近在做一个分布式数据系统的测试的时候,才有“学到用时方恨少”的感悟。在此把最近总结的一些东西陆续跟测试 部的同学们一起分享吧。

1. in如何与list绑定:

一个带in子查询的语句相信对很多人来说都是司空见惯了的,例如:「select * from normaltbl_ora where pk in (1,2,3,4)」、「select * from normaltbl_ora where name in (“manhong”,”yihuan”,”gongyangyu”,”yaolingling”) 」。但是如果in的查询字段上没有建立索引或者无法通过索引查询,那数据库会将该字段与in里面的每个值都进行比较运算,如果记录数有成千上万条甚至以 上,会明显感觉到SQL的CPU开销过大甚至难以负荷,过量的使用这样的语句,将引起数据库的大量硬解析与共享池的SQL碎片。所以,在实际的应用过程 中,我们则可以采用list的方式将这些in字段绑定起来。接下来具体描述如何创建in与list绑定,以及如何去使用它们。

a. 创建数据类型

数值列表数据类型

字符串列表数据类型

b. 创建相关函数

数值列表函数

字符串列表函数

 

c. 查询

通过数值列表函数查询

通过字符串列表函数查询

2. 关于Hint的使用:

在做分布式数据系统测试的时候,发现它们有一个非常关键的技术点是生成sql的执行计划。而Hint就是这样的一种机制,用来告诉优化器按照我们的 告诉它的方式生成执行计划。Hint可以基于表连接的顺序、表连接的方法、访问路径、并行度等规则对dml语句、或者查查询语句产生作用,通过它我们可以 实现:

1) 使用的优化器的类型

2) 基于代价的优化器的优化目标,是all_rows还是first_rows。

3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。

4) 表之间的连接类型

5) 表之间的连接顺序

6) 语句的并行程度

a. Hint语法:

/*  */常写代码但较少接触Hint的同学们可千万别误认为这只是代码的简单注释。

举几个简单的应用例子:

i. 尽快地显示前5行记录

ii. 再比如说大数据量、分库分表查询中比较常用到的并行查询操作

 

试验的时候虽然数据量不大,但是效果倒是还挺明显的,速度之间比对接近于1:2。像淘宝这种大数据量应用,每张数据表都有过千万甚至过亿数据的时 候,使用parallel Hint效果会非常明显,当然数据库主机的CPU的核数越多,系统当前负载越低的时候,parallel Hint的优势将会越加明显。

关于Hint的使用,要尽可的自身去体会才能真正理解其作用,在遇到使用Hint的地方大家可以多关注一下,有时间也可以自己做一些调查验证。

原文链接:http://qa.taobao.com/?p=11122

转载于:https://www.cnblogs.com/mixer/archive/2010/12/30/2448768.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值