`

hint提示的相关介绍

 
阅读更多

介绍hint的使用之前先了解RBO和CBO
Oracle的优化器的RBO和CBO方式
1、基于规则的优化方式(Rule-Based Optimization,简称为RBO)
    优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则,对数据是不敏感的。它只借助少量的信息来决定一个sql语句的执行计划,包括:
    1)sql语句本身
    2)sql中涉及到的table、view、index等的基本信息
    3)本地数据库中数据字典中的信息(远程数据库数据字典信息对RBO是无效的)
    例如:我们常见的,当一个where子句中的一列有索引时去走索引。但是需要注意,走索引不一定就是优的,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)的效率更优。

2、基于代价的优化方式(Cost-Based Optimization,简称为CBO)

    它是看语句的代价(Cost),通过代价引擎来估计每个执行计划所需的代价,该代价将每个执行计划所耗费的资源进行量化,CBO根据这个代价选择出最优的执行计划。一个查询所耗费的资源可分为三部分:I/O代价、CPU代价、NETWORK代价。I/O是指把数据从磁盘读入内存时所需代价(该代价是查询所需最主要的,所以在优化时一个基本原则就是降低I/O总次数);CPU代价是指处理内存中数据所需的代价,数据一旦读入内存,当我们识别出我们所要的数据后,会在这些数据上执行排序(sort)或连接(join)操作,这需要消耗CPU资源;对于访问远程节点来说,network代价的花费也是很大的。
    优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息(dbms_stat.analyze)。
    如星型连接排列查询,哈希连接查询,函数索引,和并行查询等一些技术都是基于CBD的。

使用hint的注意事项:
提示(hint)从Oracle7中引入,目的是弥补基于成本优化器的缺陷。提示通常用来改变SQL执行计划,提高执行效率。
1.使用提示需要遵循的原则
  1)仔细检查提示语法。尽量使用完整注释语法/*+ hint */
  2)使用表别名。如果在查询中指定了表别名,那么提示必须也使用表别名。例如:select /*+ index(e,dept_idx) */ * from emp e;
  3)不要在提示中使用模式名称:如果在提示中指定了模式的所有者,那么提示将被忽略。例如:
    select /*+ index(scott.emp,dept_idx) */ * from emp;
  4)检验提示。如果提示指定了不可用的访问路径,那么这个提示将被忽略。

2.导致提示无效的条件:
  1)cluster 与非簇表一同使用
  2)hash 与非簇表一同使用
  3)hash_aj 不存在子查询
  4)index 指定的索引不存在
  5)index_combine 不存在位图索引
  6)merge_aj 不存在子查询
  7)parallel 调用的不是TABLE ACCESS FULL计划
  8)push_subq 不存在子查询
  9)star 事实表中存在不恰当的索引
  10)use_concat 在where子句中不存在多个or条件
  11)use_nl 表中不存在索引

3.几种主要的优化模式:
  优化模式包括Rule、Choose、First rows、All rows四种方式:
    Rule:基于规则的方式。
    Choolse:默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。
    First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
    All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走RBO的方式。

4.表的连接提示
  1)use_hash提示
    use_hash 提示对指定的表进行散列连接。散列连接是Oracle用以驱动表(最小的表)向RAM区中装载记录的方法,RAM区由HASH_AREA_SIZE定义。
    散列连接适合中间结果比较大的情况。使用散列连接时,HASH_AREA_SIZE对速度影响非常大,如果驱动表不能一次装入内存,那么需要使用TEMP表
    空间,这种情况下速度比较慢。这个参数可以在session级别动态修改,需要进行散列连接时可以临时增大,速度可能显著增加。
  2)use_merge 提示
    use_merge 提示强制执行一个排序合并操作。排序合并操作通常与并行查询结合使用,因为排序合并操作倾向于全表扫描。该提示适合于生成大型结果集的查询。
  3)use_nl:
    use_nl提示将强制对目标表执行嵌套循环连接。use_nl提示很少用于SQL调整,因为CBO和RBO更倾向于使用循环嵌套连接。
  4)star提示
    star 提示强制使用星型查询计划。前提是查询中至少三个表,而且在事实表中存在恰当的索引 

5.表反连接提示
  SQL反连接是指在语句中包含NOT IN 或者NOT EXISTS子句时执行的操作。
 1)merge_aj
  在使用全表访问比索引访问更好的情况下,可以在NOT IN子查询中使用merge_aj提示以便执行反连接。
 2)hash_aj
   hash_aj 提示放在NOT IN 子查询中用来希望执行散列连接时,执行散列反连接。hash_aj和merge_aj要求子查询列非空。

6.INDEX提示
  1)INDEX提示简介:
    INDEX提示被用于显示指定表名或表名与索引。如果只指定了表名,那么优化器将使用表中的"最优"索引。在永久优化SQL语句中,建议指定表和索引。
  2)index_join 提示
    index_join 提示明确要求优化器使用索引连接来作为访问路径。
  3)and_equal 提示
    and_equal 提示可以使多个非唯一的索引合并索引,并且使这些索引操作时就象单个连续索引一样。该提示如果被应用,在查询计划中显示的是AND-EQUAL
  4)index_asc 提示
    index_asc 提示使用升序索引。这是默认的优化器行为
  5)no_index 提示
    该提示忽略索引存在,类似full
  6)index_combine提示
    index_combine 提示用来强制使用位图索引作为表的访问路径。
  7)index_ffs提示
    索引快速完全扫描可以在不访问任何记录的情况下完成查询。
  8)use_concat提示
    use_concat提示要求为所有的OR条件使用UNION ALL执行计划,并将这个查询重新书写为多个查询。如果在WHERE子句中存在大量OR条件,可以考虑使用use_concat提示。

7.总结

  1)因为提示放在注释中,所以如果提示通现存的执行计划不兼容,或者提示不正确,有可能被忽略。
  2)在使用RBO时,可以通过提示将指定的查询更改为CBO。切记要对查询中涉及的所有表和索引进行分析
  3)在使用CBO的时候,可以通过添加RULE提示或者FIRST_ROWS提示来开始调整一个可以的SQL语句
  4)提示可以在子查询中使用,但是外部查询的提示不会带入子查询。
  5)如果在查询计划中发现卡笛尔积(CARTESIAN),则要尽量解决。

在SQL优化过程中常见Oracle HINT的用法:
1. /*+ALL_ROWS*/
 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.
 SELECT /*+ALL_ROWS*/ * from i_exch_s WHERE districtid=1116;
 
2. /*+FIRST_ROWS*/
 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.
 SELECT /*+FIRST_ROWS*/ * from i_exch_s WHERE districtid=1116;
 
3. /*+CHOOSE*/
 表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
 表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;
 SELECT /*+CHOOSE*/ * from i_exch_s WHERE districtid=1116;
 
4. /*+RULE*/
 表明对语句块选择基于规则的优化方法.
 SELECT /*+ RULE */ * from i_exch_s WHERE districtid=1116;

5. /*+FULL(TABLE)*/
 表明对表选择全局扫描的方法.
 SELECT /*+FULL(A)*/ * from i_exch_s a WHERE districtid=1116;

6. /*+ROWID(TABLE)*/
 提示明确表明对指定表根据ROWID进行访问.
 SELECT /*+ROWID(i_exch_s)*/ * from i_exch_s WHERE ROWID>='AAATf0AALAABp2NAAM'AND districtid=1116;

7. /*+CLUSTER(TABLE)*/
 提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.
 SELECT /*+CLUSTER */ emp.empno,dept.deptno from emp,dept WHERE emp.deptno=dept.deptno;

8. /*+INDEX(TABLE INDEX_NAME)*/
 表明对表选择索引的扫描方法.
 SELECT /*+INDEX(i_exch_s gwm_fid)*/* from i_exch_s WHERE gwm_fid=50076211;

9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
 表明对表选择索引升序的扫描方法.
 SELECT /*+INDEX_ASC(i_exch_s gwm_fid)*/ * from i_exch_s WHERE gwm_fid=50076211;

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(i_exch_s gwm_fid GWM_EDITDATE)*/ gwm_fid,GWM_EDITDATE from i_exch_s WHERE gwm_fid<50076211;

12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
 表明对表选择索引降序的扫描方法.
 SELECT /*+INDEX_DESC(i_exch_s gwm_fid)*/ * from i_exch_s WHERE gwm_fid=50076211;

13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
 对指定的表执行快速全索引扫描,而不是全表扫描的办法.
 SELECT /*+INDEX_FFS(i_exch_s gwm_fid)*/ * from i_exch_s WHERE gwm_fid=50076211;

14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
 提示明确进行执行规划的选择,将几个单列索引的扫描合起来.
 SELECT /*+ADD_EQUAL(i_exch_s gwm_fid,GWM_EDITDATE,DELETETAG)*/ * from i_exch_s WHERE gwm_fid=50076211;

15. /*+USE_CONCAT*/
 对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.
 SELECT /*+USE_CONCAT*/ * from i_exch_s WHERE gwm_fid=50076211 or districtid=1116;

16. /*+NO_EXPAND*/
 对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.
 SELECT /*+NO_EXPAND*/ * from i_exch_s WHERE gwm_fid=50076211 or districtid=1116;

17. /*+NOWRITE*/
 禁止对查询块的查询重写操作.
 SELECT /*+NO_EXPAND*/ * from i_exch_s WHERE gwm_fid=50076211;
 
18. /*+REWRITE*/
 可以将视图作为参数.
 SELECT /*+NO_EXPAND*/ * from vi_exch_s WHERE gwm_fid=50076211;
 
19. /*+MERGE(TABLE)*/
能够对视图的各个查询进行相应的合并.
select /*+MERGE(V) */ C.GWM_FNO,C.GWM_FID,C.GWM_CNO,v.NAME
  FROM i_exch_s C,(select a.name,a.gwm_fno,a.gwm_fid from i_exch_info a group by gwm_fno,name,gwm_fid) v
  WHERE v.GWM_FID=C.GWM_FID;

20. /*+NO_MERGE(TABLE)*/
 对于有可合并的视图不再合并.
select /*+NO_MERGE(V) */ C.GWM_FNO,C.GWM_FID,C.GWM_CNO,v.NAME
  FROM i_exch_s C,(select a.name,a.gwm_fno,a.gwm_fid from i_exch_info a group by gwm_fno,name,gwm_fid) v
  WHERE v.GWM_FID=C.GWM_FID;
  
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(i_exch_info)*/ a.g3e_fno,b.gwm_fid,b.name from i_exch_info a,i_exch_s b WHERE a.g3e_fid=b.gwm_fid;

23. /*+USE_MERGE(TABLE)*/
 将指定的表与其他行源通过合并排序连接方式连接起来.
 SELECT /*+USE_MERGE(i_exch_info,i_exch_s)*/ * from i_exch_info a,i_exch_s b WHERE a.g3e_fid=b.gwm_fid;

24. /*+USE_HASH(TABLE)*/
 将指定的表与其他行源通过哈希连接方式连接起来.
 SELECT /*+USE_HASH(i_exch_info,i_exch_s)*/ * from i_exch_info a,i_exch_s b WHERE a.g3e_fid=b.gwm_fid;

25. /*+DRIVING_SITE(TABLE)*/
 强制与ORACLE所选择的位置不同的表进行查询执行.
 SELECT /*+DRIVING_SITE(b)*/ * from i_exch_info a,i_exch_s@igisdb b WHERE a.g3e_fid=b.g3e_fid;

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 ;
 
设定选用哪种优化模式:

    A、在initSID.ora中设定OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS(默认是Choose)
    B、Sessions级别通过:ALTER SESSION SET OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS
    C、语句级别用Hint(/*+ ... */)来设定


一些常见的问题:
  A、为什么表的某个字段明明有索引,但执行计划却不走索引?
    1、优化模式是all_rows的方式
    2、表作过analyze,有统计信息
    3、表很小,上文提到过的,Oracle的优化器认为不值得走索引。

  B、使用CBO时,SQL语句中为什么不能引用系统数据字典表或视图?
    1、因为系统数据字典表都未被分析过,可能导致极差的“执行计划”。
    2、擅自对数据字典表做分析,可能导致死锁,或系统性能严重下降。

  C、使用CBO时如何选择表连接方式?
    1、CBO有时会偏重于SMJ和HJ,但在OLTP系统中,NL一般会更好,因为它高效的使用了索引。
    2、SMJ即使相关列上建有索引,最多只能因索引的存在,避免数据排序过程。
    3、HJ由于须做HASH运算,索引的存在对数据查询速度几乎没有影响。

  D、使用CBO时,需要注意什么吗?
    1、必须保证为表和相关的索引搜集足够的统计数据, 对数据经常有增、删、改的表最好定期对表和索引进行分析
    2、可用SQL语句:analyze table xxx compute statistics for all indexes

  E、为什么有时使用CBO会比较慢?
    1、没有对表或视图进行Analyze
    2、SQL进行CBO时对于没有Analyze的对象会自动进行Analyze,因此造成运行缓慢

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

Optimization Approaches

Access Methods

ALL_ROWS

AND_EQUAL

CHOOSE

CLUSTER

FIRST RULES

FULL

RULE

HASH

Parallel Execution

HASH_AJ

APPEND*ORDERED

HASH_SJ ***

STAR**

INDEX

STAR_TRANSFORMATION*

INDEX_ASC

Join Operations

INDEX_COMBINE*

DRIVING_SITE*

INDEX_DESC

USE_HASH**

INDEX_FFS*

USE_MERGE

MERGE_AJ**

USE_NL

MERGE_SJ***

Additional Hints

ROW_ID

CACHE

USE_CONCAT

NOCACHE

NO_EXPAND***

PUSH_SUBQ

REWRITE***

MERGE***

NOREWRITE***

NO_MERGE*

Join Orders

PUSH_JOIN_PRED***

 

NO_PUSH_JOIN_PRED***

NOAPPEND*

ORDERED PREDICATES***

NOPARALLEL

 

PARALLEL

 

PARALLEL_INDEX*

 

NO_PARALLEL_INDEX***

 

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

提示(hint)从Oracle7中引入,目的是弥补基于成本优化器的缺陷。提示通常用来改变SQL执行计划,提高执行效率。

 

1.使用提示需要遵循的原则
1)仔细检查提示语法。尽量使用完整注释语法/*+ hint */
2)使用表别名。如果在查询中指定了表别名,那么提示必须也使用表别名。例如:select /*+ index(e,dept_idx) */ * from emp e;
3)不要在提示中使用模式名称:如果在提示中指定了模式的所有者,那么提示将被忽略。例如:
select /*+ index(scott.emp,dept_idx) */ * from emp;
4)检验提示。如果提示指定了不可用的访问路径,那么这个提示将被忽略。

2.导致提示无效的条件:

提示

 

被忽略的条件

 

cluster

 

与非簇表一同使用

 

hash

 

与非簇表一同使用

 

hash_aj

 

不存在子查询

 

index

 

指定的索引不存在

 

index_combine

 

不存在位图索引

 

merge_aj

 

不存在子查询

 

parallel

 

调用的不是TABLE ACCESS FULL计划

 

push_subq

 

不存在子查询

 

star

 

事实表中存在不恰当的索引

 

use_concat

 

在where子句中不存在多个or条件

 

use_nl

 

表中不存在索引

 


3几种主要的优化模式:
1)all_rows:all_rows是基于成本的优化方法,目的是提供整体最佳的吞吐量和最小的资源消耗。all_rows提示倾向使用全表扫描,而且不适用于OLTP数据库。使用all_rows提示应该保障查询中涉及的表和索引拥有使用analyze命令分析得到的统计资料。
2)rule:rule提示使Oracle为查询提供基于规则的优化模式。在怀疑CBO生成了非优化的执行计划时,通常首先尝试使用rule提示。Rule提示忽略表和索引的统计资料,并且使用基本的试探法生成执行计划。
3)first_rows:这个提示是基于成本的优化方法,目的是提供最快的反应时间。使用first_rows提示应该保障查询中涉及的表和索引拥有使用analyze命令分析得到的统计资料。
4.表的连接提示
1)use_hash提示
use_hash 提示对指定的表进行散列连接。散列连接是Oracle用以驱动表(最小的表)向RAM区中装载记录的方法,RAM区由HASH_AREA_SIZE定义。散列连接适合中间结果比较大的情况。使用散列连接时,HASH_AREA_SIZE对速度影响非常大,如果驱动表不能一次装入内存,那么需要使用TEMP表空间,这种情况下速度比较慢。这个参数可以在session级别动态修改,需要进行散列连接时可以临时增大,速度可能显著增加。
2)use_merge 提示
use_merge 提示强制执行一个排序合并操作。排序合并操作通常与并行查询结合使用,因为排序合并操作倾向于全表扫描。该提示适合于生成大型结果集的查询。
3)use_nl:
use_nl提示将强制对目标表执行嵌套循环连接。use_nl提示很少用于SQL调整,因为CBO和RBO更倾向于使用循环嵌套连接。
4)star提示
star 提示强制使用星型查询计划。前提是查询中至少三个表,而且在事实表中存在恰当的索引 
5.表反连接提示
SQL反连接是指在语句中包含NOT IN 或者NOT EXISTS子句时执行的操作。
1)merge_aj
在使用全表访问比索引访问更好的情况下,可以在NOT IN子查询中使用merge_aj提示以便执行反连接。
2)hash_aj
hash_aj 提示放在NOT IN 子查询中用来希望执行散列连接时,执行散列反连接。
hash_aj和merge_aj要求子查询列非空。
6INDEX提示
1)INDEX提示简介:
INDEX提示被用于显示指定表名或表名与索引。如果只指定了表名,那么优化器将使用表中的"最优"索引。在永久优化SQL语句中,建议指定表和索引。
2)index_join 提示
index_join 提示明确要求优化器使用索引连接来作为访问路径。
3)and_equal 提示
and_equal 提示可以使多个非唯一的索引合并索引,并且使这些索引操作时就象单个连续索引一样。该提示如果被应用,在查询计划中显示的是AND-EQUAL
4)index_asc 提示
index_asc 提示使用升序索引。这是默认的优化器行为
5)no_index 提示
该提示忽略索引存在,类似full
6)index_combine提示
index_combine 提示用来强制使用位图索引作为表的访问路径。
7)index_ffs提示
索引快速完全扫描可以在不访问任何记录的情况下完成查询。
8)use_concat提示
use_concat提示要求为所有的OR条件使用UNION ALL执行计划,并将这个查询重新书写为多个查询。如果在WHERE子句中存在大量OR条件,可以考虑使用use_concat提示。
7.总结
1)因为提示放在注释中,所以如果提示通现存的执行计划不兼容,或者提示不正确,有可能被忽略。
2)在使用RBO时,可以通过提示将指定的查询更改为CBO。切记要对查询中涉及的所有表和索引进行分析
3)在使用CBO的时候,可以通过添加RULE提示或者FIRST_ROWS提示来开始调整一个可以的SQL语句
4)提示可以在子查询中使用,但是外部查询的提示不会带入子查询。
5)如果在查询计划中发现卡笛尔积(CARTESIAN),则要尽量解决。

 

 

 

 

分享到:
评论

相关推荐

    js hint 提示 js hint 提示

    js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示

    漂亮简洁的气泡Hint提示

    在IT界,用户界面的设计与用户体验紧密相连,而“漂亮简洁的气泡Hint提示”则是一种提升用户体验的有效方法。在Delphi开发环境中,系统默认的提示信息(Hint)虽然能够提供帮助信息,但其样式相对单一,可能无法满足...

    Delphi 气泡形式的Hint提示(可以修改字体颜色和边框颜色)

    Sherryhint.pas从这儿文件改过来的,很简单,有感兴趣的可以看一下…… Delphi 气泡形式的Hint提示(可以修改字体颜色和边框颜色)

    Balloon Hint

    "Balloon Hint"是Delphi编程环境中的一种特性,主要用于提供一种可视化的小提示,它会在鼠标悬停在某个控件上时显示一个形如气泡的信息窗口,通常用来展示额外的说明或者帮助信息。在Delphi 2010中,Balloon Hint...

    MySQL hint用法解析

    在MySQL中还有一种提示,叫做hint,hint是对数据库的提示,我们都知道, 在执行一条SQL语句的时候,MySQL都会生成一个执行计划,而hint就是用来告诉优化器按照我们告诉它的方式生成执行计划。Hint可以基于表连接的...

    给cxGrid附加格式化的Hint

    由于cxGrid把Hint给封装了(它的Hint须在列宽不够大时才显示,且显示的内容不能随意),使得Hint无法方便地使用,经在cxGrid源码中分析,弄出这个给cxGrid附加格式化Hint的方法,在Delphi6、ExpressQuantumGrid_v5.8...

    带图标的提示栏(Hint窗口)

    Hint窗口是一种轻量级的提示机制,当鼠标悬停在某个组件上时,它会显示相关信息。通常,这些提示是文本形式,但通过自定义,我们可以加入图标,使其更直观、更具吸引力。 在Delphi中,Hint窗口是由THintWindow类...

    oracle_hint教程汇总

    Oracle Hint是Oracle数据库系统中的一种特性,它允许数据库管理员或开发人员通过在SQL语句中添加特定的提示来指导查询优化器如何执行查询。Hint机制为优化查询性能提供了额外的控制,尤其是在面对复杂查询和性能瓶颈...

    修改EditText的hint

    `Hint` 是`EditText` 的一个重要属性,它会在用户未输入任何文本时显示一条提示信息,帮助用户了解该输入框的预期用途。本篇将详细介绍如何修改`EditText`的`hint`,特别是针对`hint`的字体大小进行调整。 首先,让...

    Delphi的Hint

    本文将详细介绍Delphi中Hint的基本用法、自定义设置以及实现透明提示窗口的原理。 #### 二、基本用法 1. **启用Hint:** - 在Delphi中,默认情况下,Hint功能是关闭的。要启用它,需要在窗体或控件的创建过程中...

    oracle hint 语句优化

    **含义**:此Hint提示优化器根据ROWID访问指定表,适用于那些已经知道ROWID的情况。 **示例**: ```sql SELECT /*+ ROWID(BSEMPMS) */ * FROM BSEMPMS WHERE ROWID &gt;= 'AAAAAAAAAAAAAA' AND EMP_NO = 'SCOTT'; ``` ...

    Oracle hint的用法

    本文将详细介绍Oracle Hint的一些常用技巧,并通过实例来演示它们的具体应用。 #### 二、Hint类型及其使用场景 1. **/*+ALL_ROWS*/** - **用途**:指示优化器选择基于成本的优化策略(Cost-Based Optimizer, CBO...

    Oracle中hint的理解篇

    - `hint` 是具体的提示关键字。 - `text` 可以包含额外的信息或者注释。 2. **示例**: - 指定使用特定的索引:`SELECT /*+ INDEX(t idx_name) */ * FROM t;` - 指定全表扫描:`SELECT /*+ FULL(t) */ * FROM t...

    Android 点击EditText编辑框清除hint预设字

    `Hint` 是`EditText` 的一个重要属性,它会在输入框内显示提示文字,帮助用户理解应该输入什么内容。当用户开始输入时,这个提示文字通常会自动消失。然而,有些情况下,开发者可能希望用户在点击`EditText`时才清除...

    Delphi 菜单的Hint (Delphi 2007)

    本文将深入探讨如何在Delphi 2007中为TMenuItem对象设置和显示Hint(提示信息),特别是在TPopupMenu中的实现。 在Delphi中,TMenuItem用于构建应用程序的主菜单和上下文菜单。尽管TMenuItem本身不直接支持ShowHint...

    delphi7实现 combobox下拉hint.

    以下将详细讲解如何实现`ComboBox`的下拉提示(hint)。 1. **理解Combobox组件**: `ComboBox`由两部分组成:编辑框和下拉列表。用户可以在编辑框中输入文字或点击下拉箭头浏览并选择列表中的项目。默认情况下,`...

    CSS实现的工具提示Hint.css.zip

    Hint.css 是一个 CSS 实现的工具提示效果。无需 JavaScript 代码。 标签:Hintcss

    delphi 自制hint

    在Delphi编程环境中,Hint是一种非常实用的功能,它允许开发者为控件添加临时提示信息,当鼠标悬停在该控件上时,这些提示信息会短暂显示。然而,Delphi的默认Hint功能可能无法满足所有需求,因此,了解如何自制Hint...

    在Form和Panel中一直显示hint

    Hint功能是一个非常实用的特性,它允许开发者为控件添加额外的信息提示,当鼠标悬停在该控件上时显示。然而,默认情况下,Hint信息只会在首次鼠标悬停时显示,一旦用户将鼠标移开再返回,Hint就不会再次出现。这可能...

    前端项目-simple-hint.zip

    **前端项目:简单提示(Simple Hint)** 在前端开发中,提示信息是用户交互中不可或缺的一部分,它们可以为用户提供操作反馈、指南或者额外信息。"前端项目-simple-hint" 是一个专注于CSS实现的工具提示解决方案,...

Global site tag (gtag.js) - Google Analytics