当前位置 > 主页 > 万和大讲堂 >


南京Oracle认证培训 江苏万和小编整理一些基础的SQL优化

2016-01-13 11:26

  SQL语句优化数据库效率

 

  (1)布尔值上的索引无效例 :病区医嘱表 (bqyz) 中医嘱记费标志 (jfbz)为布尔型,虽然在该列上建立索引,但要检索哪些医嘱未曾记费,速度依然较慢。后来在做优化时把 jfbz 数据类型改为 Number(1),再在该列上重新创建索引,PB 程序配合修改,同样硬件下,速度提高近 30 倍。南京Oracle培训

 

  (2)隐式转换与索引失效

 

  例 :出院病人信息表 (zy_brry) 中病人 ID号 (zybrid) 字段定义为 varchar2 (10), 但在查询时把该字段作为 number 类型以 where 条件传给Oracle, 这样会导致索引失效。南京Oracle培训

 

  错误的例子 :

 

  SELECT *FROM zy_brryWHERE ZYBRID = 201209101;正确的例子 :

 

  SELECT *FROM zy_brryWHERE ZYBRID =‘201209101’;(3)对索引列进行运算导致索引失效例:住院收费项目 (zysfxm) 中项目金额 (xmje)上建有索引,where 子句中对列的任何操作结果都是在 S QL 运行时逐列计算得到的 , 因此它不得不进行全表搜索 , 而没有使用该列上的索引。

 

  错误的例子 :

 

  SELECT *FROM zysfxmWHERE xmje/30=1000;正确的例子 :

 

  SELECT *FROM zysfxmWHERE xmje=1000*30;如何创建索引,提高数据库执行效率1)索引创建原则。在select操作占大部分的表上创建索引;在where子句中出现最频繁的列上创建索引;在选择性高的列上创建索引;复合索引的主列应该是最有选择性的和where限定条件最常用的列;小于5 M的表,最好不要使用索引来查询,表越小,越适合用全表扫描。南京Oracle培训

 

  2)索引使用原则。

 

  查询结果是所有数据行的5%以下时,使用index查询效果最好;where条件中经常用到表的多列时,使用复合索引效果会好于几个单列索引;因为当SQL语句所查询的列全部都出现在复合索引中时,此时由于Oracle只需要查询索引块即可获得所有数据,当然比使用多个单列索引要快得多;索引利于select,但对经常insert、delete尤其update的表,会降低效率。

 

  SQL编写原则

 

  原则1建议使用CBO(基于开销的优化器cost-based-optimizer);对于任何SQL语句一定要考虑其性能;通过查看执行计划来比较SQL语句的优劣,防止经验主义;可以利用hint等功能,只在非常必要时才使用hint:仅在对SQL的执行计划非常肯定地要使用hint时才使用。

 

  原则2Where条件中等号左边不要引用函数;where条件中对于不同的数据类型要做显示数据转换;NOT,!=,<>,||不会用索引;not exists好于not in;Exists好于in;用UNION代替DECODE;用UNION ALL代替UNION;用UNION代替OR;RDER BY不要加表达式。南京OCP培训

 

  原则3避免复杂的SQL语句,采用多条语句代替;避免不必要的排序,使用Distinct、Group by、Order by等;使用表的别名;连接多个表时, 把表的别名前缀于每个column上,这样可减少解析的时间以及避免由column歧义引起的语法错误。

 

  原则4使用复合索引的第一个列;及时commit释放资源,回滚南京Oracle培训 段上用于恢复数据的信息;commit不要太频繁;分批处理、逐次提交。南京OCP培训

 

  原则5分页;运算放在常量端;全表删除用truncate而不用delete;删除大量数据的方法;更新大量数据时使用临时表。

 

  原则6绑定变量ID=1 / ID=:V;硬分析/软分析:语法检测、语义检查、检查共享池中是否有相同的语句存在,如果存在,则重用共享池中的SQL的执行计划和优化策略(软解析);如果不存在,则重新生成SQL的执行计划和优化策略(硬解析)。南京Oracle认证培训


最近开班 more>
  • Web前端开发
  • 软件测试
  • 软件测试预科班
  • AI大模型+全栈开发开班
  • 云原生精英班
  • 云网预科班
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第五期
  • Java全栈
  • CISP
  • HCIP-cloud
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCP 19C
  • RHCA
  • 6月9日
  • 5月21日
  • 5月14日
  • 6月9日
  • 5月7日
  • 5月26日
  • 5月19日
  • 5月12日
  • 6月3日
  • 6月9日
  • 随时开课
  • 7月12日
  • 5月19日
  • 5月19日
  • 5月7日
  • 5月10日
  • 5月24日
  • 5月24日
  • 随时开课
  • 随时开课
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入