导读:在以前开发的时候,一直在使用oracle,甚至参加过oracle的培训,考过Oracle Database 10g Administrator I,自认对oracle还算有些了解,不过最近在做一个分布式数据系统的测试的时候,才有“学到用时方恨少”的感悟。Oracle与Mysql的应用是怎样的呢?在此把最近总结的一些东西陆续跟测试 部的同学们一起分享吧。
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的地方大家可以多关注一下,有时间也可以自己做一些调查验证。
【编辑推荐】