- 浏览: 143637 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (129)
- framework (18)
- Java (25)
- web2.0 (7)
- Oracle (23)
- 框架师 (20)
- design pattern (5)
- j2ee (6)
- 日常问题收集 (51)
- linux (12)
- Oralce优化 (4)
- life (3)
- sqlplus (1)
- sql (2)
- C# (4)
- mysql (9)
- 拿来主义 (12)
- 标签 (0)
- ThinkPHP (1)
- python (1)
- mybatis (2)
- html5 (1)
- jquery (2)
- hadoop (3)
- git (1)
- struts2 (1)
- shiro (1)
- struts (1)
最新评论
-
xiao88xian:
...
jQuery常用经典技巧
介绍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),则要尽量解决。
发表评论
-
ORACLE学习系列.1.安装篇 RHEL5.5 64位下安装Oracle 11g 64位安装前置条件的两种方法
2014-08-15 14:04 1139http://www.oracle-base.com/ar ... -
Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
2014-08-06 16:26 830from :http://blog.csdn.net/idb ... -
解决maven仓库中找不到ojdbc驱动的问题
2013-02-21 16:51 887maven仓库中的ojdbc下载需要oracle的官方授权, ... -
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
2013-02-21 15:59 1814将数据从MySQL迁移到Oracle的注意事项 1. 自动 ... -
树结构和它的专用函数SYS_CONNECT_BY_PATH
2012-10-22 21:55 773来至:http://blog.oracle.com.cn/ht ... -
linux下新建oracle数据库实例
2012-10-20 16:33 8851、在Linux服务器的图形界面下,打开一个终端,输入如 ... -
Instance and Databases
2012-10-20 13:42 767实例和数据库的关系,其实真正的世界也有相似的关系 ... -
Oracle Index 学习
2012-10-11 21:58 8381.index需要储存空间和I/O ... -
sqlplus 常用set指令
2012-10-10 20:30 1048set colsep' '; ... -
ORACLE SPOOL 总结
2012-10-10 20:30 745spool常用的设置set colsep' '; ... -
sql loader 导入数据是报错:Oracle修改时间报:ORA-01830: 日期格式图片在转换整个输入字符串之前结束的解决办法
2012-10-10 13:12 2097在学习SQL Loader导入数据的时候,试用SCOT ... -
Linux下监听程序TNS-12543错误解决方法
2012-10-09 21:42 1372转载:http://blog.csdn.net/libi ... -
选择ORACLE,坚持走下去
2012-09-24 08:38 889工作之后感觉 ... -
linux 启动oracle
2012-09-23 10:34 759转载:http://rorom.iteye.com/bl ... -
ORA-01012: not logged on 解决办法
2012-09-16 22:54 1613conn / as sysdba 报错ORA-01012: n ... -
GROUP分组函数之ROLLUP
2012-09-16 17:36 973/****************** *ROLL ... -
MERGE函数的妙用案例
2012-09-16 16:44 902本文来至《剑破冰山 ... -
Windows 7-64位安装PLSQL-Developer
2012-09-16 16:41 1090WIN7-64位安装PLSQL-Developer步骤以下 ... -
使用Hint时的注意事项
2012-08-03 16:10 971在使用Hint时需要注意的一点是,并非任何时刻Hint都 ... -
Oracle 中对中文字段进行排序通常有三种方式
2012-07-27 18:24 889Oracle 中对中文字段进行排序通常有三种方式 1) ...
相关推荐
js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示
在IT界,用户界面的设计与用户体验紧密相连,而“漂亮简洁的气泡Hint提示”则是一种提升用户体验的有效方法。在Delphi开发环境中,系统默认的提示信息(Hint)虽然能够提供帮助信息,但其样式相对单一,可能无法满足...
Sherryhint.pas从这儿文件改过来的,很简单,有感兴趣的可以看一下…… Delphi 气泡形式的Hint提示(可以修改字体颜色和边框颜色)
"Balloon Hint"是Delphi编程环境中的一种特性,主要用于提供一种可视化的小提示,它会在鼠标悬停在某个控件上时显示一个形如气泡的信息窗口,通常用来展示额外的说明或者帮助信息。在Delphi 2010中,Balloon Hint...
在MySQL中还有一种提示,叫做hint,hint是对数据库的提示,我们都知道, 在执行一条SQL语句的时候,MySQL都会生成一个执行计划,而hint就是用来告诉优化器按照我们告诉它的方式生成执行计划。Hint可以基于表连接的...
由于cxGrid把Hint给封装了(它的Hint须在列宽不够大时才显示,且显示的内容不能随意),使得Hint无法方便地使用,经在cxGrid源码中分析,弄出这个给cxGrid附加格式化Hint的方法,在Delphi6、ExpressQuantumGrid_v5.8...
Hint窗口是一种轻量级的提示机制,当鼠标悬停在某个组件上时,它会显示相关信息。通常,这些提示是文本形式,但通过自定义,我们可以加入图标,使其更直观、更具吸引力。 在Delphi中,Hint窗口是由THintWindow类...
`Hint` 是`EditText` 的一个重要属性,它会在输入框内显示提示文字,帮助用户理解应该输入什么内容。当用户开始输入时,这个提示文字通常会自动消失。然而,有些情况下,开发者可能希望用户在点击`EditText`时才清除...
Oracle Hint是Oracle数据库系统中的一种特性,它允许数据库管理员或开发人员通过在SQL语句中添加特定的提示来指导查询优化器如何执行查询。Hint机制为优化查询性能提供了额外的控制,尤其是在面对复杂查询和性能瓶颈...
`Hint` 是`EditText` 的一个重要属性,它会在用户未输入任何文本时显示一条提示信息,帮助用户了解该输入框的预期用途。本篇将详细介绍如何修改`EditText`的`hint`,特别是针对`hint`的字体大小进行调整。 首先,让...
本文将详细介绍Delphi中Hint的基本用法、自定义设置以及实现透明提示窗口的原理。 #### 二、基本用法 1. **启用Hint:** - 在Delphi中,默认情况下,Hint功能是关闭的。要启用它,需要在窗体或控件的创建过程中...
**含义**:此Hint提示优化器根据ROWID访问指定表,适用于那些已经知道ROWID的情况。 **示例**: ```sql SELECT /*+ ROWID(BSEMPMS) */ * FROM BSEMPMS WHERE ROWID >= 'AAAAAAAAAAAAAA' AND EMP_NO = 'SCOTT'; ``` ...
本文将详细介绍Oracle Hint的一些常用技巧,并通过实例来演示它们的具体应用。 #### 二、Hint类型及其使用场景 1. **/*+ALL_ROWS*/** - **用途**:指示优化器选择基于成本的优化策略(Cost-Based Optimizer, CBO...
- `hint` 是具体的提示关键字。 - `text` 可以包含额外的信息或者注释。 2. **示例**: - 指定使用特定的索引:`SELECT /*+ INDEX(t idx_name) */ * FROM t;` - 指定全表扫描:`SELECT /*+ FULL(t) */ * FROM t...
本文将深入探讨如何在Delphi 2007中为TMenuItem对象设置和显示Hint(提示信息),特别是在TPopupMenu中的实现。 在Delphi中,TMenuItem用于构建应用程序的主菜单和上下文菜单。尽管TMenuItem本身不直接支持ShowHint...
以下将详细讲解如何实现`ComboBox`的下拉提示(hint)。 1. **理解Combobox组件**: `ComboBox`由两部分组成:编辑框和下拉列表。用户可以在编辑框中输入文字或点击下拉箭头浏览并选择列表中的项目。默认情况下,`...
Hint.css 是一个 CSS 实现的工具提示效果。无需 JavaScript 代码。 标签:Hintcss
在Delphi编程环境中,Hint是一种非常实用的功能,它允许开发者为控件添加临时提示信息,当鼠标悬停在该控件上时,这些提示信息会短暂显示。然而,Delphi的默认Hint功能可能无法满足所有需求,因此,了解如何自制Hint...
Hint功能是一个非常实用的特性,它允许开发者为控件添加额外的信息提示,当鼠标悬停在该控件上时显示。然而,默认情况下,Hint信息只会在首次鼠标悬停时显示,一旦用户将鼠标移开再返回,Hint就不会再次出现。这可能...
**前端项目:简单提示(Simple Hint)** 在前端开发中,提示信息是用户交互中不可或缺的一部分,它们可以为用户提供操作反馈、指南或者额外信息。"前端项目-simple-hint" 是一个专注于CSS实现的工具提示解决方案,...