精华内容
下载资源
问答
  • android 默认状态时输入文字后hint消失,在此实现的是点击EditText时,也就是获得焦点的时候hint就会消失。 以下为代码 Activity_main.xml android:layout_width="fill_par

    android 默认状态时输入文字后hint消失,在此实现的是点击EditText时,也就是获得焦点的时候hint就会消失。

    以下为代码

    Activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/app_name"
            android:inputType="number" >
    
            <requestFocus />
        </EditText>
    
        <EditText
            android:id="@+id/editText2"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/app_name"
            android:inputType="number" />
    
        <EditText
            android:id="@+id/editText3"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/app_name"
            android:inputType="number" />
    
        <EditText
            android:id="@+id/editText4"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/app_name"
            android:inputType="number" />
     
    </LinearLayout>


    以下为MainActivity.java

    package com.chuanchuan.edittextdemo;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.View;
    import android.view.View.OnFocusChangeListener;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.app.Activity;
    public class MainActivity extends Activity {
    
    	private EditText et1;
    	private EditText et2;
    	private EditText et3;
    	private EditText et4;
    	String strHint;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		et1=(EditText) findViewById(R.id.editText1);
    		et2=(EditText) findViewById(R.id.editText2);
    		et3=(EditText) findViewById(R.id.editText3);
    		et4=(EditText) findViewById(R.id.editText4);
    		strHint=getResources().getString(R.string.app_name);
    		final EditText[] mArray = new EditText[] { et1,et2, et3, et4 };
    		
    		
    		
    		for (int i = 0; i < mArray.length; i++) {
    			final int j = i;
    			
    			//EditText 获得焦点时hint消失,失去焦点时hint显示
    			mArray[j].setOnFocusChangeListener(new OnFocusChangeListener() {
    				@Override
    				public void onFocusChange(View v, boolean hasFocus) {
    	
    			        if (!hasFocus) {
    			        	((TextView) v).setHint(strHint);
    			        } else {
    			        	((TextView) v).setHint("");
    			        }
    					
    				}
    			});
    
    			
    			mArray[j].addTextChangedListener(new TextWatcher() {
    				private CharSequence temp;
    				private int sStart;
    				private int sEnd;
    
    				@Override
    				public void onTextChanged(CharSequence s, int start,
    						int before, int count) {
    					temp = s;
    				}
    
    				@Override
    				public void beforeTextChanged(CharSequence s, int start,
    						int count, int after) {
    				}
    
    				@Override
    				public void afterTextChanged(Editable s) {
    					sStart = mArray[j].getSelectionStart();
    					sEnd = mArray[j].getSelectionEnd();
    
    					//前三个EditText输入满位(此处设置 为3)后,光标自动移到下一个TextView
    					if (temp.length() == 3 && (j == 0 || j == 1 || j == 2)) {
    						mArray[j + 1].setFocusable(true);
    						mArray[j + 1].setFocusableInTouchMode(true);
    						mArray[j + 1].requestFocus();
    					}
    					//输入超出三位时,删除多出的一位
    					if (temp.length() > 3) {
    
    						s.delete(sStart - 1, sEnd);
    						int tSelection = sStart;
    						mArray[j].setText(s);
    						mArray[j].setSelection(tSelection);
    
    					}
    				}
    			});
    		}
    		
    	}
    }
    


     

    展开全文
  • 常见Oracle HINT的用法

    万次阅读 2019-03-14 22:55:14
    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_...

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法:
    1. /*+ALL_ROWS*/
    表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.
    例如:
    SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
    2. /*+FIRST_ROWS*/
    表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.
    例如:
    SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
    3. /*+CHOOSE*/
    表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
    表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;
    例如:
    SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
    4. /*+RULE*/
    表明对语句块选择基于规则的优化方法.
    例如:
    SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
    5. /*+FULL(TABLE)*/
    表明对表选择全局扫描的方法.
    例如:
    SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';
    6. /*+ROWID(TABLE)*/
    提示明确表明对指定表根据ROWID进行访问.
    例如:
    SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'
    AND EMP_NO='SCOTT';
    7. /*+CLUSTER(TABLE)*/
    提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.
    例如:
    SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
    WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
    8. /*+INDEX(TABLE INDEX_NAME)*/
    表明对表选择索引的扫描方法.
    例如:
    SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';
    9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
    表明对表选择索引升序的扫描方法.
    例如:
    SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';
    10. /*+INDEX_COMBINE*/
    为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的布尔组合方式.
    例如:
    SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS
    WHERE SAL<5000000 AND HIREDATE
    11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
    提示明确命令优化器使用索引作为访问路径.
    例如:
    SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
    FROM BSEMPMS WHERE SAL<60000;
    12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
    表明对表选择索引降序的扫描方法.
    例如:
    SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';
    13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
    对指定的表执行快速全索引扫描,而不是全表扫描的办法.
    例如:
    SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';
    14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
    提示明确进行执行规划的选择,将几个单列索引的扫描合起来.
    例如:
    SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';
    15. /*+USE_CONCAT*/
    对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.
    例如:
    SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';
    16. /*+NO_EXPAND*/
    对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.
    例如:
    SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';
    17. /*+NOWRITE*/
    禁止对查询块的查询重写操作.
    18. /*+REWRITE*/
    可以将视图作为参数.
    19. /*+MERGE(TABLE)*/
    能够对视图的各个查询进行相应的合并.
    例如:
    SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
    ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
    AND A.SAL>V.AVG_SAL;
    20. /*+NO_MERGE(TABLE)*/
    对于有可合并的视图不再合并.
    例如:
    SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;
    21. /*+ORDERED*/
    根据表出现在FROM中的顺序,ORDERED使ORACLE依此顺序对其连接.
    例如:
    SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;
    22. /*+USE_NL(TABLE)*/
    将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.
    例如:
    SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
    23. /*+USE_MERGE(TABLE)*/
    将指定的表与其他行源通过合并排序连接方式连接起来.
    例如:
    SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
    24. /*+USE_HASH(TABLE)*/
    将指定的表与其他行源通过哈希连接方式连接起来.
    例如:
    SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
    25. /*+DRIVING_SITE(TABLE)*/
    强制与ORACLE所选择的位置不同的表进行查询执行.
    例如:
    SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;
    26. /*+LEADING(TABLE)*/
    将指定的表作为连接次序中的首表.
    27. /*+CACHE(TABLE)*/
    当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端
    例如:
    SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;
    28. /*+NOCACHE(TABLE)*/
    当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端
    例如:
    SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;
    29. /*+APPEND*/
    直接插入到表的最后,可以提高速度.
    insert /*+append*/ into test1 select * from test4 ;
    30. /*+NOAPPEND*/
    通过在插入语句生存期内停止并行模式来启动常规插入.
    insert /*+noappend*/ into test1 select * from test4 ;







     

    在使用Hint时需要注意的一点是,并非任何时刻Hint都起作用。 导致HINT 失效的原因有如下2点:

    (1) 如果CBO 认为使用Hint 会导致错误的结果时,Hint将被忽略。

    如索引中的记录因为空值而和表的记录不一致时,结果就是错误的,会忽略hint。

    (2) 如果表中指定了别名,那么Hint中也必须使用别名,否则Hint也会忽略。

    Select /*+full(a)*/ * from t a; -- 使用hint

    Select /*+full(t) */ * from t a; --不使用hint

    根据hint的功能,可以分成如下几类:

    HintHint 语法
    优化器模式提示ALL_ROWS Hint
     FIRST_ROWS Hint
     RULE Hint
    访问路径提示CLUSTER Hint
     FULL Hint
     HASH Hint
     INDEX Hint
     NO_INDEX Hint
     INDEX_ASC Hint
     INDEX_DESC Hint
     INDEX_COMBINE Hint
     INDEX_FFS Hint
     INDEX_SS Hint
     INDEX_SS_ASC Hint
     INDEX_SS_DESC Hint
     NO_INDEX_FFS Hint
     NO_INDEX_SS Hint
     ORDERED Hint
     LEADING Hint
     USE_HASH Hint
     NO_USE_HASH Hint
    表连接顺序提示USE_MERGE Hint
     NO_USE_MERGE Hint
     USE_NL Hint
     USE_NL_WITH_INDEX Hint
     NO_USE_NL Hint
    表关联方式提示PARALLEL Hint
     NO_PARALLEL Hint
     PARALLEL_INDEX Hint
     NO_PARALLEL_INDEX Hint
     PQ_DISTRIBUTE Hint
    并行执行提示FACT Hint
     NO_FACT Hint
     MERGE Hint
     NO_MERGE Hint
     NO_EXPAND Hint
     USE_CONCAT Hint
    查询转换提示REWRITE Hint
     NO_REWRITE Hint
     UNNEST Hint
     NO_UNNEST Hint
     STAR_TRANSFORMATION Hint
     NO_STAR_TRANSFORMATION Hint
     NO_QUERY_TRANSFORMATION Hint
     APPEND Hint
     NOAPPEND Hint
     CACHE Hint
     NOCACHE Hint
     CURSOR_SHARING_EXACT Hint
    其他HintDRIVING_SITE Hint
     DYNAMIC_SAMPLING Hint
     PUSH_PRED Hint
     NO_PUSH_PRED Hint
     PUSH_SUBQ Hint
     NO_PUSH_SUBQ Hint
     PX_JOIN_FILTER Hint
     NO_PX_JOIN_FILTER Hint
     NO_XML_QUERY_REWRITE Hint
     QB_NAME Hint
     MODEL_MIN_ANALYSIS Hint

    一. 和优化器相关的Hint

    Oracle 允许在系统级别,会话级别和SQL中(hint)优化器类型:

    系统级别:

     1: SQL>alter system set optimizer_mode=all_rows;

    会话级别:

    SQL>alter system set optimizer_mode=all_rows;

    关于优化器,参考:

    Oracle Optimizer CBO RBO

    http://blog.csdn.net/tianlesoftware/archive/2010/08/19/5824886.aspx

    1.1 ALL_ROWS 和FIRST_ROWS(n) -- CBO 模式

    对于OLAP系统,这种系统中通常都是运行一些大的查询操作,如统计,报表等任务。 这时优化器模式应该选择ALL_ROWS. 对于一些分页显示的业务,就应该用FIRST_ROWS(n)。 如果是一个系统上运行这两种业务,那么就需要在SQL 用hint指定优化器模式。

    如:

    SQL> select /* + all_rows*/ * from dave;

    SQL> select /* + first_rows(20)*/ * from dave;

    1.2 RULE Hint -- RBO 模式

    尽管Oracle 10g已经弃用了RBO,但是仍然保留了这个hint。 它允许在CBO 模式下使用RBO 对SQL 进行解析。

    如:

    SQL> show parameter optimizer_mode

    NAME TYPE VALUE

    ------------------------------------ ----------- ------------------------------

    optimizer_mode string ALL_ROWS

    SQL> set autot trace exp;

    SQL> select /*+rule */ * from dave;

    执行计划

    ----------------------------------------------------------

    Plan hash value: 3458767806

    ----------------------------------

    | Id | Operation | Name |

    ----------------------------------

    | 0 | SELECT STATEMENT | |

    | 1 | TABLE ACCESS FULL| DAVE |

    ----------------------------------

    Note

    -----

    - rule based optimizer used (consider using cbo) -- 这里提示使用RBO

    SQL>

    二. 访问路径相关的Hint

    这一部分hint 将直接影响SQL 的执行计划,所以在使用时需要特别小心。 该类Hint对DBA分析SQL性能非常有帮助,DBA 可以让SQL使用不同的Hint得到不同的执行计划,通过比较不同的执行计划来分析当前SQL性能。

    2.1 FULL Hint

    该Hint告诉优化器对指定的表通过全表扫描的方式访问数据。

    示例:

    SQL> select /*+full(dave) */ * from dave;

    要注意,如果表有别名,在hint里也要用别名, 这点在前面已经说明。

    2.2 INDEX Hint

    Index hint 告诉优化器对指定的表通过索引的方式访问数据,当访问索引会导致结果集不完整时,优化器会忽略这个Hint。

    示例:

    SQL> select /*+index(dave index_dave) */ * from dave where id>1;

    谓词里有索引字段,才会用索引。

    2.3 NO_INDEX Hint

    No_index hint 告诉优化器对指定的表不允许使用索引。

    示例:

    SQL> select /*+no_index(dave index_dave) */ * from dave where id>1;

    2.4 INDEX_DESC Hint

    该Hint 告诉优化器对指定的索引使用降序方式访问数据,当使用这个方式会导致结果集不完整时,优化器将忽略这个索引。

    示例:

    SQL> select /*+index_desc(dave index_dave) */ * from dave where id>1;

    2.5 INDEX_COMBINE Hint

    该Hint告诉优化器强制选择位图索引,当使用这个方式会导致结果集不完整时,优化器将忽略这个Hint。

    示例:

    SQL> select /*+ index_combine(dave index_bm) */ * from dave;

    2.6 INDEX_FFS Hint

    该hint告诉优化器以INDEX_FFS(INDEX Fast Full Scan)的方式访问数据。当使用这个方式会导致结果集不完整时,优化器将忽略这个Hint。

    示例:

    SQL> select /*+ index_ffs(dave index_dave) */ id from dave where id>0;

    2.7 INDEX_JOIN Hint

    索引关联,当谓词中引用的列上都有索引时,可以通过索引关联的方式来访问数据。

    示例:

    SQL> select /*+ index_join(dave index_dave index_bm) */ * from dave where id>0 and name='安徽安庆';

    2.8 INDEX_SS Hint

    该Hint强制使用index skip scan 的方式访问索引,从Oracle 9i开始引入这种索引访问方式,当在一个联合索引中,某些谓词条件并不在联合索引的第一列时(或者谓词并不在联合索引的第一列时),可以通过index skip scan 来访问索引获得数据。 当联合索引第一列的唯一值很小时,使用这种方式比全表扫描效率要高。当使用这个方式会导致结果集不完整时,优化器将忽略这个Hint。

    示例:

    SQL> select /*+ index_ss(dave index_union) */ * from dave where id>0;

    三. 表关联顺序的Hint

    表之间的连接方式有三种。 具体参考blog:

    多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5826546.aspx

    3.1 LEADING hint

    在一个多表关联的查询中,该Hint指定由哪个表作为驱动表,告诉优化器首先要访问哪个表上的数据。

    示例:

    SQL> select /*+leading(t1,t) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    SQL> select /*+leading(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    --------------------------------------------------------------------------------

    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Ti

    --------------------------------------------------------------------------------

    | 0 | SELECT STATEMENT | | 14 | 812 | 6 (17)| 00

    | 1 | MERGE JOIN | | 14 | 812 | 6 (17)| 00

    | 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 4 | 80 | 2 (0)| 00

    | 3 | INDEX FULL SCAN | PK_DEPT | 4 | | 1 (0)| 00

    |* 4 | SORT JOIN | | 14 | 532 | 4 (25)| 00

    | 5 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00

    --------------------------------------------------------------------------------

    3.2 ORDERED Hint

    该hint 告诉Oracle 按照From后面的表的顺序来选择驱动表,Oracle 建议在选择驱动表上使用Leading,它更灵活一些。

    SQL> select /*+ordered */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    四. 表关联操作的Hint

    4.1 USE_HASH,USE_NL,USE_MERGE hint

    表之间的连接方式有三种。 具体参考blog:

    多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5826546.aspx

    这三种关联方式是多表关联中主要使用的关联方式。 通常来说,当两个表都比较大时,Hash Join的效率要高于嵌套循环(nested loops)的关联方式。

    Hash join的工作方式是将一个表(通常是小一点的那个表)做hash运算,将列数据存储到hash列表中,从另一个表中抽取记录,做hash运算,到hash 列表中找到相应的值,做匹配。

    Nested loops 工作方式是从一张表中读取数据,访问另一张表(通常是索引)来做匹配,nested loops适用的场合是当一个关联表比较小的时候,效率会更高。

    Merge Join 是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配,因为merge join需要做更多的排序,所以消耗的资源更多。 通常来讲,能够使用merge join的地方,hash join都可以发挥更好的性能。

    USE_HASH,USE_NL,USE_MERGE 这三种hint 就是告诉优化器使用哪种关联方式。

    示例如下:

    SQL> select /*+use_hash(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    SQL> select /*+use_nl(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    SQL> select /*+use_merge(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    4.2 NO_USE_HASH,NO_USE_NL,NO_USE_MERGE HINT

    分别禁用对应的关联方式。

    示例:

    SQL> select /*+no_use_merge(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    SQL> select /*+no_use_nl(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    SQL> select /*+no_use_hash(t,t1) */ * from scott.dept t,scott.emp t1 where t.deptno=t1.deptno;

    五. 并行执行相关的Hint

    5.1 PARALLEL HINT

    指定SQL 执行的并行度,这个值会覆盖表自身设定的并行度,如果这个值为default,CBO使用系统参数值。

    示例:

    SQL> select /*+parallel(t 4) */ * from scott.dept t;

    关于表的并行度,我们在创建表的时候可以指定,如:

    SQL> CREATE TABLE Anqing

    2 (

    3 name VARCHAR2 (10)

    4 )

    5 PARALLEL 2;

    表已创建。

    SQL> select degree from all_tables where table_name = 'ANQING'; -- 查看表的并行度

    DEGREE

    --------------------

    2

    SQL> alter table anqing parallel(degree 3); -- 修改表的并行度

    表已更改。

    SQL> select degree from all_tables where table_name = 'ANQING';

    DEGREE

    --------------------

    3

    SQL> alter table anqing noparallel; -- 取消表的并行度

    表已更改。

    SQL> select degree from all_tables where table_name = 'ANQING';

    DEGREE

    --------------------

    1

    5.2 NO_PARALLEL HINT

    在SQL中禁止使用并行。

    示例:

    SQL> select /*+ no_parallel(t) */ * from scott.dept t;

    六. 其他方面的一些Hint

    6.1 APPEND HINT

    提示数据库以直接加载的方式(direct load)将数据加载入库。

    示例:

    Insert /*+append */ into t as select * from all_objects;

    这个hint 用的比较多。 尤其在插入大量的数据,一般都会用此hint。

    Oracle 插入大量数据

    http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745144.aspx

    6.2 DYNAMIC_SAMPLING HINT

    提示SQL 执行时动态采样的级别。 这个级别从0-10,它将覆盖系统默认的动态采样级别。

    示例:

    SQL> select /*+ dynamic_sampling(t 2) */ * from scott.emp t where t.empno>0;

    6.3 DRIVING_SITE HINT

    这个提示在分布式数据库操作中比较有用,比如我们需要关联本地的一张表和远程的表:

    Select /* + driving_site(departmetns) */ * from employees,departments@dblink where

    employees .department_id = departments.department_id;

    如果没有这个提示,Oracle 会在远端机器上执行departments 表查询,将结果送回本地,再和employees表关联。 如果使用driving_site(departments), Oracle将查询本地表employees,将结果送到远端,在远端将数据库上的表与departments关联,然后将查询的结果返回本地。

    如果departments查询结果很大,或者employees查询结果很小,并且两张表关联之后的结果集很小,那么就可以考虑把本地的结果集发送到远端。 在远端执行完后,在将较小的最终结果返回本地。

    6.4 CACHE HINT

    在全表扫描操作中,如果使用这个提示,Oracle 会将扫描的到的数据块放到LRU(least recently Used: 最近很少被使用列表,是Oracle 判断内存中数据块活跃程度的一个算法)列表的最被使用端(数据块最活跃端),这样数据块就可以更长时间地驻留在内存当中。 如果有一个经常被访问的小表,这个设置会提高查询的性能;同时CACHE也是表的一个属性,如果设置了表的cache属性,它的作用和hint一样,在一次全表扫描之后,数据块保留在LRU列表的最活跃端。

    示例:

    SQL> select /*+full(t) cache (t) */ * from scott.emp;

    小结:

    对于DBA来讲,掌握一些Hint操作,在实际性能优化中有很大的好处,比如我们发现一条SQL的执行效率很低,首先我们应当查看当前SQL的执行计划,然后通过hint的方式来改变SQL的执行计划,比较这两条SQL 的效率,作出哪种执行计划更优,如果当前执行计划不是最优的,那么就需要考虑为什么CBO 选择了错误的执行计划。当CBO 选择错误的执行计划,我们需要考虑表的分析是否是最新的,是否对相关的列做了直方图,是否对分区表做了全局或者分区分析等因素。

    关于执行计划参考:

    Oracle Explain Plan

    http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5827245.aspx

    总之,在处理问题时,我们要把问题掌握在可控的范围内,不能将问题扩大化,甚至失控。 作为一个DBA,需要的扎实的基本功,还有胆大心细,遇事不慌。

     

    转载原文:http://blog.itpub.net/394664/viewspace-1063176

    展开全文
  • css hint规则

    2020-01-07 13:19:43
    不要使用多个class选择元素,如a.foo.boo,这在ie6及以下不能正确解析 移除空的css规则,如a{} 正确的使用显示属性,如display:inline不要和width,height,float,margin,padding同时使用,display:inline-block...
    1. 不要使用多个class选择元素,如a.foo.boo,这在ie6及以下不能正确解析
    2. 移除空的css规则,如a{}
    3. 正确的使用显示属性,如display:inline不要和width,height,float,margin,padding同时使用,display:inline-block不要和float 同时使用等
    4. 避免过多的浮动,当浮动次数超过十次时,会显示警告
    5. 避免使用过多的字号,当字号声明超过十种时,显示警告
    6. 避免使用过多web字体,当使用超过五次时,显示警告
    7. 避免使用id作为样式选择器
    8. 标题元素只定义一次
    9. 使用width:100%时要小心
    10. 属性值为0时不要写单位
    11. 各浏览器专属的css属性要有规范, 例如.foo{-moz-border-radius:5px;border-radius:5px}
    12. 避免使用看起来像正则表达式的css3选择器
    13. 遵守盒模型规则
    展开全文
  • 达梦HINT

    2019-11-18 15:44:30
    达梦HINT,全部参照官方文档。 在打开监控开关(ENABLE_MONITOR = 1、MONITOR_TIME = 1)后,可以通过查询动态视图V$LONG_EXEC_SQLS或V$SYSTEM_LONG_EXEC_SQLS来确定高负载的SQL语句,前者显示最近1000条执行时间较...

    达梦HINT,全部参照官方文档。

    1. 在打开监控开关(ENABLE_MONITOR = 1、MONITOR_TIME = 1)后,可以通过查询动态视图V$LONG_EXEC_SQLS或V$SYSTEM_LONG_EXEC_SQLS来确定高负载的SQL语句,前者显示最近1000条执行时间较长的SQL语句,后者显示服务器启动以来执行时间最长的20条SQL语句。
    2. DM数据库提供自动SQL调整功能,使用查询优化向导工具(在DM性能监视工具中),输入需要进行调整的SQL语句,向导工具在分析完执行计划后会给出推荐索引的提示。
    3. SQL语言是一种相当灵活的结构化查询语言,可以利用多种不同形式的查询语句完成相同的查询功能。为了使执行效率达到最优,可以参考以下原则开发出有效的SQL语句:避免使用OR子句;避免使用困难的正则表达式(所谓困难的正则表达式是指开头和结尾都为通配符的正则表达式);灵活使用伪表SYSDUAL;SELECT项避免使用*;避免功能相似的重复索引;使用COUNT(*)统计结果行数;使用EXPLAIN来查看执行计划;UNION和UNION ALL的选择(UNION和UNION ALL的区别是前者会过滤掉值完全相同的元组,为此UNION操作符需要建立HASH表缓存所有数据并去除重复,当HASH表大小超过了ini参数指定的限制时还会做刷盘。因此若应用场景不关心重复元组,那么UNION ALL会优于UNION);优化GROUP BY...HAVING(GROUP BY最常见的实现有HASH分组HAGR和排序分组SAGR,前者需要缓存中间结果,若用户在GROUP BY的列上建立索引,那么优化器就会判断并可能使用上该索引,这时的GROUP BY 就会变成SAGR。HAVING是分组后对结果集进行的过滤,若过滤条件无关集函数操作,可以考虑将过滤条件放在WHERE而不是HAVING中。);使用优化器提示HINT。
    4. HINT的常见格式如下:SELECT /*+HINT1 [HINT2]*/ 列名 FROM 表名 WHERE_CLAUSE;或UPDATE 表名 /*+HINT1 [HINT2]*/;或DELETE FROM 表名 /*+HINT1 [HINT2]*/; 需要注意的是,若HINT的语法没有写对或指定的值不正确,DM并不会报错,而是直接忽略HINT继续执行。可以通过V$HINT_INI_INFO动态视图查询DM支持的HINT。HINT参数分为两类:HINT_TYPE为OPT表示分析阶段使用的参数;为EXEC表示运行阶段使用的参数,运行阶段使用的参数对于视图无效。
    5. 索引提示语法:表名 + INDEX + 索引名 或 /*+INDEX (表名[,]索引名) {INDEX (表名[,]索引名)}*/
    6. 不使用索引提示语法:/*+NO_INDEX (表名[,]索引名) {NO_INDEX (表名[,]索引名)}*/
    7. 可以通过指定两个表间的连接方法来检测不同连接方式的查询效率,指定的连接可能由于无法实现或代价过高而被忽略。若连接方法提示中的表名(列名)或索引名无效也会被自动忽略。如:USE_HASH(强制两个表间使用指定顺序的哈希连接,/*+USE_HASH(TAB1,TAB2)*/);NO_USE_HASH(强制两个表间不能使用指定顺序的哈希连接,/*+NO_USE_HASH(TAB1,TAB2)*/);USE_PL(强制两个表使用嵌套循环连接,/*+USE_PL(TAB1,TAB2)*/);NO_USE_PL(强制两个表之间不能使用嵌套循环连接,/*+USE_PL(TAB1,TAB2)*/);USE_NL_WITH_INDEX(当连接情况为左表+右表索引时,强制两个表间使用索引连接,/*+USE_NL_WITH_INDEX(TAB1,IDX1)*/);NO_USE_NL_WITH_INDEX(当连接情况为左表+右表索引时,强制两个表间不能使用索引连接,/*+NO_USE_NL_WITH_INDEX(TAB1,IDX1)*/);USE_MERGE(强制两个表间使用归并连接,归并连接所用的两个列都必须是索引列,/*+USE_MERGE(TAB1,TAB2)*/);NO_USE_MERGE(强制两个表间不使用归并连接,/*+NO_USE_MERGE(TAB1,TAB2)*/);SEMI_GEN_CROSS(优先采用半连接转换为等价的内连接,仅OPTIMIZER_MODE = 1时有效,/*+SEMI_GEN_CROSS OPTIMIZER_MODE(1)*/);NO_SEMI_GEN_CROSS(不采用半连接转换为等价的内连接,仅OPTIMIZER_MODE = 1有效,/*+NO_SEMI_GEN_CROSS OPTIMIZER_MODE(1)*/);USE_CVT_VAR(优先采用变量改写方式实现连接,适合驱动表数据量少而另一侧计划较复杂的场景,仅OPTIMIZER_MODE = 1有效,/*+USE_CVT_VAR OPTIMIZER_MODE(1)*/);NO_USE_CVT_VAR(不考虑变量改写方式实现连接,仅OPTIMIZER_MODE = 1有效,/*+NO_USE_CVT_VAR OPTIMIZER_MODE(1)*/);ENHANCED_NAME_JOIN(一般情况下,归并连接需要左右孩子的数据按照连接列有序,使用此优化器提示时,优化器将考虑通过插入排序操作符的方式实现归并连接,仅OPTIMIZER_MODE = 1有效)
    8. 多表连接时优化器会考虑各种可能的排列组合顺序,使用ORDER HINT指定连接顺序提示可以缩小优化器试探的排列空间。若连接顺序和连接方法提示同时指定且二者间存在自相矛盾,优化器会以连接顺序提示为准。语法:/*+ORDER (TAB1,TAB2...)*/
    9. 优化器在计划优化阶段会自动获取基表的行数,但是一些特殊类型的表行数估算并不准确,或DBA希望了解表大小对计划影响的时候,需要手动设置表的行数。语法:/+*STAT(表名,行数)+/。统计信息提示只能针对基表设置,视图和派生表等对象设置无效。若表对象存在别名则必须使用别名。行数只能使用整数,或者整数+K/M/G(千/百万/十亿)。行数提示设置后,统计信息的其它内容也会做相应的调整。
    展开全文
  • Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。 此时就需要DBA进行人为的...
  • Android Studio 用相对布局写注册页面

    千次阅读 2019-11-12 17:22:51
    界面 要求:设计一用于注册的Activity。 ... 用户名框中只能输入大写字母,账号...爱好用选框实现,至少要有4选项,默认选中第一和第二选项;界面中有一“注册”按钮,“注册”按钮要水平居中。 &...
  • Oracle Hint

    2011-09-05 16:43:29
    Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入...在SQL代码中使用Hint,可能导致非常严重的后果,因为数据库的数据是变化的,在某一时刻使用这执行计划是最优的,在另一时刻,却可能很差,这也...
  • 1.简述一Activity跳转到另一Activity时,两Activity生命周期方法的执行过程。 首先,我创建了一MainActivity和SecondActivity两Activity。我在两Activity中都加入了七方法,并加入了打印语句。在...
  • Delphi的Hint入门指导

    千次阅读 2016-10-18 16:56:03
    Delphi中使用提示是如此简单,只需将欲使用Hint的控件作如下设置:  ShowHint := True;  Hint := ‘提示信息’;  不必写一行代码,相当方便。  但有时我们又想自己定制提示的效果,使其看起来更美观更具个人...
  • oracle hint

    千次阅读 2012-11-15 09:20:54
    Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。 此时就需要DBA进行人为的干预...
  • Oracle优化06-Hint

    千次阅读 2016-11-20 22:11:23
    概述先了解一下Oracle的优化器: ... ORACLE 10g开始,ORACLE已经彻底丢弃了RBO,但是依然保留了这规则 CBO: Cost-Based Optimization 基于代价的优化器。CBO优化器根据SQL语句生成一组可能被使用的执行计划,估算出
  • MongoDB的查询优化器与hint(),查询优化器的查询计划,
  • 一般的hint大小我们都是通过 textsize 来设置成和 text 一样大小的,但有时候,由于提示语稍微一点,我们又不想做过多的处理的时候,可以选择将 hint 单独设置,使之比 textsize 更小一些,以便全部显示在 ...
  • python中的 type hint 类型提示

    千次阅读 2018-12-22 10:51:11
    许多IDE(如pycharm)会有输入类型提示和自动代码补全,就是靠类似于静态语言中的变量类型声明的做法。...使用overload可以提示同一名字的函数(方法)支持的不同类型和数目的形参。 使用typin...
  • Oracle 建议尽量使用这些辅助的调优工具而不是 Hint,一是这些调优工具比 Hint 更加系统、全面、有效,二是当用了很 Hint 后,在数据和数据库环境发生变化时,可能带来新的问题,也就是说使用 Hint 可能能带来短期...
  • Hint View(iPhone源代码)

    2021-03-17 04:27:11
    来源:Licence:未知平台:iOS设备:iPhone / iPad作者:touchbee  在窗口顶端或底部弹出自定义的...如果有多个notification view,则进行排队,按顺序显示。 Code4App编译测试,适用环境:Xcode 4.3, iOS 5.0。
  • oracle Hint 用法

    2014-10-11 14:13:40
    Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入...在SQL代码中使用Hint,可能导致非常严重的后果,因为数据库的数据是变化的,在某一时刻使用这执行计划是最优的,在另一时刻,却可能很差,这也是CBO
  • 当然这里其实是一个多数据源的问题,可以借助第三方包来实现数据源,也可以通过Hint分片策略实现,这里我们就通过这场景来介绍下Hint分片策略的使用 2. 使用Hint分片策略 这里我们通过使用切面,在不同的Dao层...
  • 最近看到头条的首页顶部搜索框有一切换hint文字的动画效果,比较好奇它是怎么实现的,经过一番探索发现这顶部的搜索框并不是真正的搜索框,点击之后是直接跳转到搜索界面,本身并不是一EditText。这样的实现...
  • 紧张了几月的奋战终于项目到了测试阶段,真是泪奔啊,回想这段时间的地狱生涯 真实汗颜啊~~~~,闲话不说了,看图说话, 问题,相信这张图片已经展示的很明白了 下来在来看看我的代码 EditText android:id=...
  • 其实很简单,只要加上android:gravity="top"就搞定OK了。
  • 使用Hint时的注意事项

    千次阅读 2015-01-07 17:26:59
    在使用Hint时需要注意的一点是,并非任何时刻Hint都起作用。 导致HINT 失效的原因有如下2点: (1) 如果CBO 认为使用Hint 会导致错误的结果时,Hint将被忽略。 如索引中的记录因为空值而和表的记录不一致时,...
  • android:hint 如何设置字体的大小

    千次阅读 2015-04-05 23:53:32
    android:hint显示默认信息的属性,但是这属性目前(从我查的资料)只能设置颜色主要是两种方式 1、android:textColorHint="" 2、setHintTextColor(colors); 其实我们也可以用html的方式来设置这属性毕竟都...
  • Layui hint: ...网上百度了半天都没有解决方法 后来自己的搞了一个多小时 报超时就说明加载中出了问题, 所以那么就给他一正确的路径就可以了 路径如下: &l...
  • 【Delphi】Hint提示信息

    千次阅读 2015-01-27 14:04:41
    Delphi中使用提示是如此简单,只需将欲使用Hint的控件作如下设置:  ShowHint := True;  Hint := ‘提示信息’;  不必写一行代码,相当方便。  但有时我们又想自己定制提示的效果,使其看起来更美观...
  • Oracle Hint用法自学笔记

    千次阅读 2013-03-04 18:10:41
        一、Hint介绍 Hint 是Oracle提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响...因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint更像是Oracle提供给DBA用来分析问题的工

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,832
精华内容 12,332
关键字:

多个hint显示