- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ORACLESQL编写规范〔v1.1〕
* * * * * * * * * * * * * * * * * * * * * * * * * * * * 15.注意索引无法被使用的情况 被索引字段在过滤谓词上使用了全模糊查询的方式如col like ‘%ABC%’ 这种情况的处理原则还是尽量避免或者进行改写,具体方法可参照前文有关模糊查询的部分。 ? 被索引字段在过滤谓词中使用了!=,,NOT IN等 这种情况的处理原则还是尽量避免或者进行改写,比如说取不等于或NOT IN部分的反,然后就可以将条件改为等于或者是IN了。但要评估各自占总记录数的比例,如果占比过高的话,索性就用全表扫描了。 15.注意索引无法被使用的情况 被索引字段在过滤谓词中使用了函数。 此时除非建立函数索引,否则普通索引是无法被使用的,如例: WHERE TO_CHAR(zip) = ‘94002’; ? 类似这种情况我们可以将改写一下,将计算移动到等号右侧: WHERE zip = TO_NUMBER(‘94002’); 改写的原则就是使过滤谓词一边,也就是左侧保持“干净”,这样在zip字段上的普通索引就可以被使用了。因为毕竟函数索引在做索引维护的时候成本是比较高的,而且在zip字段上所建立的函数索引只能用于这种使用了该函数的场景,针对其它没使用函数的zip字段直接做过滤条件的语句是无法共用的,整体使用效率就打了折扣。 15.注意索引无法被使用的情况 因此,但凡能够通过改写解决问题的情况就不要建立函数索引。如果实在改写不了,评估建立函数索引后效率会有所提高后,也要考虑建立,毕竟全表扫描的情况是要尽量避免的。 16.减少REDO日志生成的一些手段 通过一些手段可以达到减少某些SQL的REDO日志生成量,从而达到提高效率的目的。对于报表系统、批处理系统、大批量数据加载等操作还是有一定的现实意义。 但切记一点的是,对关键的业务数据库是禁止使用该方法的,因为减少了REDO日志会使数据库做恢复时可能丢失一些没有被记录日志的数据,在对数据的完整性要求非常严格的系统中,这种操作是应该被禁止的。 16.减少REDO日志生成的一些手段 CTAS语句 CREATE TABLE a2 AS SELECT * FROM a1; --未使用 CREATE TABLE a2 NOLOGGING AS SELECT * FROM a1; --使用了 NOLOGGING? 创建(重建)索引 CREATE INDEX idx_t1 ON t1(col1); --未使用 CREATE INDEX idx_t1 ON t1(col1) NOLOGGING; --使用了NOLOGGING ALTER INDEX idx_t1 REBUILD; --未使用 ALTER INDEX idx_t1 REBUILD NOLOGGING; --使用了NOLOGGING ? 移动表 ALTER TABLE t1 MOVE; --未使用 ALTER TABLE t1 MOVE NOLOGGING; --使用了NOLOGGING 16.减少REDO日志生成的一些手段 直接路径插入 INSERT INTO t2 SELECT * FROM t1; --未使用 ALTER TABLE t2 NOLOGGING; --使用了NOLOGGING INSERT /*+APPEND*/ INTO t2 SELECT * FROM t1; --使用了APPEND ? 注意:APPEND提示要与NOLOGGING结合使用; 对于INSERT INTO… VALUES语句,不要使用APPEND提示, 因为起不到作用; 使用了APPEDN提示后的插入语句必须及时提交,这也限制了并 发性,因此在联机交易型系统中禁止使用该提示。 ? SQL
文档评论(0)