欢迎来到天天文库
浏览记录
ID:48827110
大小:333.50 KB
页数:39页
时间:2020-01-30
《华为Oracle优化.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Oracle编程与优化客服定制部2021/7/21Contents使用索引SQL编程数据库设计现网数据库操作使用索引:建立索引的原则(1)1、索引字段建议建立NOTNULL约束(isnullorisnotnull是无法用到索引的);2、表的主键、外键必须有索引;3、数据量超过1000的表、查询出总行数2%到4%行的表应该有索引;4、经常与其他表进行连接的表,在连接字段上应该建立索引;5、经常出现在Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立索引;6、可选择性高的关键字,应该建立索引;7、可选择性低的
2、关键字,但数据的值分布差异很大时,选择性数据比较少时仍然可以利用索引提高效率;Page3使用索引:建立索引的原则(2)8、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:A、正确选择复合索引中的第一个字段,一般是选择性较好的且在where子句中常用的字段上;B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;D、如果复合索引所包含的字段超
3、过3个,那么仔细考虑其必要性,考虑减少复合的字段;E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;9、频繁DML的表,不要建立太多的索引;10、不要将那些频繁修改的列作为索引列;Page4使用索引:合理的索引(1)原则如下:首先,看是否用上了索引。对于该使用索引而没有用上索引的SQL语句,应该想办法用上索引,避免全表扫描。(特别注意索引列的运算)其次,看是否用上了合理的索引,特别是复杂的SQL语句,当其中Where子句包含多个带有索引的字段时,更应该注意索引的选择是否合理。错误的索引不仅不会带来性
4、能的提高,相反往往导致性能的降低。(特别注意多个索引时哪种组合最好)Page5使用索引:合理的索引(2)针对如何用上合理的索引,以下举ORACLE数据库中的例子进行说明:1、任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。如果要使用函数建议创建相应的函数索引。2、避免不必要的类型转换,要了解“隐藏”的类型转换。3、增加查询的范围,限制全范围的搜索。4、索引的效率比较低的情况下,应该用特殊的方法屏蔽该索引,如果字段为数值型的就在表达式的字段名后
5、+0,为字符型的就并上空串。Page6使用索引:合理的索引(3)5、在ORACLE优化器无法用上合理索引的情况下,利用HINTS强制指定索引。7、在ORACLE优化器能用上合理利用索引的情况下,就不需要用HINTS强制指定索引。8、使用复合索引且第一个索引字段没有出现在where中时建议用HINTS强制。9、OLTP中尽量不用位图索引。10、在删除(delete)操作频繁,建议适当时候需重建索引(rebuild)和碎片整理(coalesce)。Page7使用索引:合理的索引(4)11、尽量使用前端匹配的模糊查询(like)
6、,以通过使用索引来避免全表扫描。12、删除无用的索引,避免对执行计划造成负面影响。13、避免在索引列上使用ISNULL和ISNOTNULL。14、正确使用组合索引,SQL语句在使用复合索引时,与该复合索引字段的组合顺序有关。Page8使用索引:常用优化器提示FULL表示对表选择全表扫描的访问方法/*+FULL([table_name])*/INDEX表示对指定表选择索引扫描的访问方法/*+INDEX(table_name[index])*/NO_INDEX表示对指定表禁止选择索引访问方法/*+NO_INDEX(table_
7、name[index])*/AND-EQUAL表示要进行执行规则的选择。使几个但列的索引的扫描合并起来/*+AND_EQUAL(table_name[index][inex]…)*/USE_CONCAT提示强制对查询语句中的WHERE从句的OR条件进行转换,转化成由UNION_ALL集合操作符连接的组合查询/*+USE_CONCAT*//*+USE_NL(table_nametable_name)*/、/*+USE_MERGE(table_nametable_name)*/、/*+USE_HASH(table_nameta
8、ble_name)*/指定表的连接方式/*+LEADING(table_name)*/指定驱动表Page9使用索引:确定索引的使用情况在oracle9i中,情况会简单得多,因为有一个新得字典视图V$SQL_PLAN存储了实际计划,这些计划用于执行共享SQL区中得语句SQL>SELECTSQL_TEXT,
此文档下载收益归作者所有