sql优化常用的15种方法,SQL优化方法

sql优化常用的15种方法,SQL优化方法,SQL语句优化方法30例(推荐)在SQL语句优化过程中,我们经常使用提示。本文总结了Oracle提示在SQL优化过程中的使用,以提高效率。1./* ALL_ROWS*/表示对语句块选择基于开销的优化方法,获得最佳吞吐量,使资源消耗最小。例如:select/* all _ rows */emp _ no,emp _ nam,dat _ in from bsempms其中emp _ no= scott2./* FIRST_ROWS*/表示对语句块选择基于开销的优化方法,获得最佳响应时间,使资源消耗最小。例如:select/* first _ rows */emp _ no,emp _ nam,dat _ in from bsempms其中emp _ no= scott3./* CHOOSE*/表示如果数据字典中有访问表的统计,将基于代价优化方法,获得最佳吞吐量;说明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;示例:select/* choose */EMP _ no,EMP _ Nam,dat _ in from bsempms其中EMP _ no= Scott4./* RULE*/指示为语句块选择基于规则的优化方法。例如:select/* rule */emp _ no,emp _ nam,dat _ in from bsempms其中emp _ no= scott5./* FULL(TABLE)*/表示表格的全局扫描方法。例如:select/* full (a) */emp _ no,emp _ nam from bsempms a其中emp _ no= scott6./* ROWID(TABLE)*/提示明确表示根据ROWID访问指定的表。例如:select/* rowid(BSE mpms)*/* from BSE mpms其中rowid= aaaaaaaaaa 和EMP _ no= Scott7./* CLUSTER(TABLE)*/提示明确指出了指定表的集群扫描的访问方式,只对集群对象有效。例如:select/* cluster */BSE mpms . EMP _ no,dpt _ no from bsempms,bsdptms其中dpt _ no= tec304 和bsemps.dpt _ no。8./* INDEX(TABLE INDEX_NAME)*/表示表选择索引的扫描方式。例如:select/* index (bsempms sex _ index)使用sex _ index因为很少有男性bsempms */from bsempms其中sex= m9./* index _ ASC(table index _ name)*/表示为表选择升序索引的扫描方法。例如:select/* index _ ASC(BSE mpms PK _ BSE mpms)*/from BSE mpms其中DPT _ no= Scott10./* INDEX_COMBINE*/为指定的表选择位图访问路径。如果INDEX_COMBINE中没有提供索引作为参数,将选择位图索引的布尔组合。例如:select/* index _ combine(BSE PMS sal _ bmhiredate _身体质量指数)*/* from BSE PMS where sal 500000 and hiredate sysdate1./* index _ join(table index _ name)*/Prompt指定命令优化器使用index作为访问路径。例如:select/* index _ join(BSE mpms sal _ hmihiredate _身体质量指数)*/sal,hiredate from BSE mpms where sal 60000;12./* index _ desc(table index _ name)*/指示为表选择降序索引的扫描方法。例如:select/* index _ desc(BSE mpms PK _ BSE mpms)*/from BSE mpms其中DPT _ no= Scott13./* index _ FFS(table index _ name)*/对指定表执行快速全索引扫描而不是全表扫描的方法。例如:select/* index _ FFS(BSE mpms in _ empnam)*/* from BSE mpms其中DPT _ no= tec30514./* add _ equal表index _ nam1,index _ nam2,*/提示明确选择执行计划,并结合多个单列索引的扫描。例如:select/* index _ FFS(BSE PMS in _ DPT no,in _ empno,in _ sex) */* from bsbs15./* USE_CONCAT*/将查询中WHERE之后的OR条件转换为UNION ALL的组合查询。例如:select/* use _ concat */* from BSE PMS其中DPT _ no= TDC 506 ,sex= m16./* NO_EXPAND*/对于WHERE之后的or或IN-LIST查询语句,NO_EXPAND会阻止它根据优化器展开。例如:select/* no _ expand */* from BSE PMS其中DPT _ no= TDC 506 ,sex= m17./* NOWRITE*/禁止重写查询块的查询。18./* REWRITE*/您可以将视图作为参数。19./* MERGE(TABLE)*/可以相应地合并视图的查询。例如:select/* merge (v) */a.emp _ no,a.emp _ nam,B . DPT _ NO FROM BSE mpms A(seletdt _ NO,AVG(SAL)AS AVG _ SAL FROM BSE mpms B GROUP BY DPT _ NO)V其中A.DPT_NO=V.DPT_NO和A . SALV.AVG _ SAL20./*否_合并(表格)*/对于有可合并的视图不再合并。例如:SELECT /* NO_MERGE(V) */A.EMP_NO,A.EMP_NAM,B . DPT _ NO FROM BSE mpms A(SELECT DPT _ NO,AVG(SAL)AS AVG _ SAL FROM BSE mpms B GROUP BY DPT _ NO)V其中A.DPT_NO=V.DPT_NO和答:萨尔。萨尔AVG21./*已订购*/根据表出现在从中的顺序,已订购使神谕依此顺序对其连接。例如:从表1 A,表2 B,表3摄氏度中选择/* ORDERED*/A .列1,B .列2,C .列3其中A.COL1=B.COL1,B . COL1=C . COL122./* USE_NL(TABLE)*/将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表。例如:SELECT/* ORDERED USE _ NL(BSE mpms)*/BSD ptms .DPT_NO,BSEMPMS .EMP_NO,BSEMPMS .BSE PMS中的EMP_NAM,BSDPTMS其中BSEMPMS .DPT_NO=BSDPTMS .DPT _ NO23./* USE_MERGE(TABLE)*/将指定的表与其他行源通过合并排序连接方式连接起来。例如:SELECT/* USE _ MERGE(BSE PMS,BSDPTMS)*/* FROM BSE PMS,BSDPTMS WHERE BSEMPMS .DPT_NO=BSDPTMS .DPT _ NO24./*使用哈希(表)*/将指定的表与其他行源通过哈希连接方式连接起来。例如:SELECT/* USE _ HASH(BSE PMS,BSDPTMS)*/* FROM BSE PMS,BSDPTMS WHERE BSEMPMS .DPT_NO=BSDPTMS .DPT _ NO25./*驾驶_地点(表格)*/h3制与神谕所选择的位置不同的表进行查询执行。例如:SELECT/* DRIVING _ SITE(DEPT)*/* FROM BSE mpms,DEPT@BSDPTMS WHERE BSEMPMS .DPT _ NO=部门DPT _ NO26./*前导(表格)*/将指定的表作为连接次序中的首表。27./*缓存(表)*/当进行全表扫描时,缓存提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端例如:从BSE mpms中选择/*完整(BSE mpms)CAHE(BSE mpms)*/EMP _ NAM;28./* NOCACHE(表)*/当进行全表扫描时,缓存提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端例如:从BSE mpms中选择/* FULL(BSE mpms)no cahe(BSE mpms)*/EMP _ NAM;29./*追加*/直接插入到表的最后,可以提高速度100 . insert/* append */到测试1从测试4中选择*30./* NOAPPEND*/通过在插入语句生存期内停止并行模式来启动常规插入。insert /* noappend*/到测试1从测试4中选择*

sql优化常用的15种方法,SQL优化方法