• oracle数据库


    1、数据库建立并发执行

    强行启用并行度来执行当前SQL。这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能。举例的话,就像电脑装了多核的CPU,但大多情况下都不会完全多核同时启用(2核以上的比较明显),使用parallel说明,就会多核同时工作,来提高效率。

    但本身启动这个功能,也是要消耗资源与性能的,会强制枪夺占用资源,在实际生产环境中会影响其他程序正常资源的使用。所以,一般都会在返回记录数大于100万时使用,效果也会比较明显。

    优势:强制启动并行进程、分配任务与系统资源、合并结果集。大大缩短计算时间。在大表查询等操作中能够起到良好的效果。在ODS系统中报表统计等方面更有使用意义。

    劣势:比较消耗资源,不建议在系统超负荷运行的情况下使用。

    注意事项:/*+parallel(t,n)*/中,t代表表别名或者表明(没有起别名情况);n代表进程数量,一般值为:cpu数量1。

    例如:SELECT /*+parallel(a,16)*/ distinct a.comcode FROM statcmain a where a.underwriteenddate BETWEEN DATE'2011-1-1' AND DATE'2014-1-31';

    一般而言主要在如下情况使用parallel HINT:

    1.表的数据量很大,超过一千万; 
    2.数据库主机是多个CPU;
    3.系统的当前负载较低;

      语法

    /*+parallel(t,n)*/中,t代表表别名或者表明(没有起别名情况);n代表进程数量,一般值为:cpu数量1。

    这个可以加到insert、delete、update、select的后面来使用(和rule的用法差不多,有机会再分享rule的用法)

    开启parallel功能的语句是:

    alter session enable parallel dml;

    这个语句是DML语句,如果在程序中用,用execute的方法打开。

    2、查看SQL语句的执行计划

    打开PL/SQL Developer软件,请确保plsql能够成功连接到一个oracle数据库。

    在PL/SQL Developer中写好一段SQL代码,按F5,或者点击“执行执行计划”图标,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。

    可以看到窗口上方是sql语句,下方显示执行计划表格。表格的列主要包含描述、用户、对象、成本花费、IO开销等,表格,当然表格列还可以自定义。表格的行包含了查询逻辑的执行顺序和各个步骤信息。

    3、oracle索引失效原因

    1) 没有查询条件,或者查询条件没有建立索引
    2) 在查询条件上没有使用引导列
    3) 查询的数量是大表的大部分,应该是30%以上。
    4) 索引本身失效
    5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等)
    错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10;
    6) 对小表查询
    7) 提示不使用索引
    8) 统计数据不真实
    9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。
    10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.
    由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给数据库,
    这样会导致索引失效. 错误的例子:select * from test where tu_mdn=13333333333;
    正确的例子:select * from test where tu_mdn='13333333333';
    12) 1,<> 2,单独的>,<,(有时会用到,有时不会)
    13,like "%_" 百分号在前.
    4,表没分析.
    15,单独引用复合索引里非第一位置的索引列.
    16,字符型字段为数字时在where条件里不添加引号.
    17,对索引列进行运算.需要建立函数索引.
    18,not in ,not exist.
    19,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
    20,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走
    21,联合索引 is not null 只要在建立的索引列(不分先后)都会走,
    in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,
    其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),
    或者=一个值; 当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),
    以上两种情况索引都会走。其他情况不会走。

    ---------
    MyISAM 存储引擎索引键长度总和不能超过1000 字节;
    BLOB 和TEXT 类型的列只能创建前缀索引;
    MySQL 目前不支持函数索引;
    使用不等于(!= 或者<>)的时候MySQL 无法使用索引;
    过滤字段使用了函数运算后(如abs(column)),MySQL 无法使用索引;
    Join 语句中Join 条件字段类型不一致的时候MySQL 无法使用索引;
    使用LIKE 操作的时候如果条件以通配符开始( '%abc...')MySQL 无法使用索引;
    使用非等值查询的时候MySQL 无法使用Hash 索引;
    在我们使用索引的时候,需要注意上面的这些限制,尤其是要注意无法使用索引的情况,因为这很容易让我们因为疏忽而造成极大的性能隐患。

  • 相关阅读:
    Linux 线程间通信方式+进程通信方式 总结
    使用opencv第三方库的makefile文件示例
    rplidar SDK 二次开发---之获取目标信息(0.1)
    #include "Target_orientation.h"
    opencv —— 调用摄像头采集图像 VideoCapture capture(0);
    cmake 支持-lpthread
    ROS下sensor_msgs::ImagePtr到sensor_msgs::Image之间的转换
    JAVA 校验身份证号码工具类(支持15位和18位)
    python面向对象游戏练习:好人坏人手枪手榴弹
    python 私有属性的作用
  • 原文地址:https://www.cnblogs.com/wangleBlogs/p/9996125.html
Copyright © 2020-2023  润新知