- 浏览: 560420 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
在oracle中,我们经常以为建立了索引,sql查询的时候就会如我们所希望的那样使用索引,事实上,oracle只会在一定条件下使用索引,这里我们总结数第一点:oracle会在条件中包含了前导列时使用索引,即查询条件中必须使用索引中的第一个列,请看下面的例子 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- BONUS TABLE DEPT TABLE DUMMY TABLE EMP TABLE SALGRADE TABLE 建立一个联合索引(注意复合索引的索引列顺序) SQL> create index emp_id1 on emp(empno,ename,deptno); Index created 建立一个单键索引 SQL> create index emp_id2 on emp(sal); Index created SQL> select table_name,index_name from user_indexes 2 where table_name='EMP'; TABLE_NAME INDEX_NAME ------------------------------ ------------------------------ EMP EMP_ID1 EMP EMP_ID2 SQL> SELECT * FROM USER_IND_COLUMNS 2 / INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESCEND ------------------------------ ------------------------------ -------------------------------------------------------------------------------- --------------- ------------- ----------- ------- EMP_ID1 EMP EMPNO 1 22 0 ASC EMP_ID1 EMP ENAME 2 10 10 ASC EMP_ID1 EMP DEPTNO 3 22 0 ASC EMP_ID2 EMP SAL 1 22 0 ASC 下面的查询由于没有使用到复合索引的前导列,所以没有使用索引 select job, empno from emp where ename='RICH'; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | |* 1 | TABLE ACCESS FULL | EMP | | | | -------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("EMP"."ENAME"='RICH') Note: rule based optimization 14 rows selected 下面的查询也由于没有使用到复合索引的前导列,所以没有使用索引 select job, empno from emp where deptno=30; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | |* 1 | TABLE ACCESS FULL | EMP | | | | -------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("EMP"."DEPTNO"=30) Note: rule based optimization 14 rows selected 下面的查询使用了复合索引中的前导列,所以查询走索引了 select job, empno from emp where empno=7777; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | | 1 | TABLE ACCESS BY INDEX ROWID| EMP | | | | |* 2 | INDEX RANGE SCAN | EMP_ID1 | | | | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("EMP"."EMPNO"=7777) Note: rule based optimization 15 rows selected 下面的查询使用了复合索引中的第一列和第二列,所以查询走索引了 select job, empno from emp where empno=7777 and ename='RICH'; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | | 1 | TABLE ACCESS BY INDEX ROWID| EMP | | | | |* 2 | INDEX RANGE SCAN | EMP_ID1 | | | | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("EMP"."EMPNO"=7777 AND "EMP"."ENAME"='RICH') Note: rule based optimization 15 rows selected 使用了复合索引的全部列,所以走索引了,另外由于选了了索引中没有包含的列(job), 所以进行索引全表扫描得到满足条件的rowid后,还要到表中检索相应的行 select job, empno from emp where empno=7777 and ename='RICH' and deptno=30; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | | 1 | TABLE ACCESS BY INDEX ROWID| EMP | | | | |* 2 | INDEX RANGE SCAN | EMP_ID1 | | | | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("EMP"."EMPNO"=7777 AND "EMP"."ENAME"='RICH' AND "EMP"."DEP TNO"=30) Note: rule based optimization 16 rows selected 使用了复合索引的全部列,所以走索引了,而且由于所有选择的列都包含在索引中,所以仅仅进行了索引范围扫描 select empno from emp where empno=7777 and ename='RICH' and deptno=30; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- -------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | |* 1 | INDEX RANGE SCAN | EMP_ID1 | | | | -------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("EMP"."EMPNO"=7777 AND "EMP"."ENAME"='RICH' AND "EM P"."DEPTNO"=30) Note: rule based optimization 15 rows selected
发表评论
-
expdp通过dblink来导入
2011-12-14 15:01 1798create.sql: spo create.log rem ... -
Library cache内部机制详解
2011-12-14 14:55 920Library cache内部机制详解 http://www ... -
Oracle的10046事件
2011-12-14 14:53 2105Oracle的10046事件,可以跟踪应用程序所执行的SQL语 ... -
REDO LOG MEMBER STATUS 和 REDO LOG GROUP STATUS
2011-12-14 14:51 935V$LOG 中列出的是REDO LOG GROUP STA ... -
oracle的exp/imp使用方法学习(转)
2011-08-30 08:54 971exp/imp两个命令可以说是oracle中最常用的命令了 ... -
oracle几个awr报告
2011-08-09 14:25 903工作中,碰到的数据库慢的几个awr报告 -
Oracle Profile 使用详解
2011-06-21 14:41 978一、目的: Oracle系统中的profile可以用来对 ... -
ORA-27013
2011-04-13 14:25 1521很新的一个bug,看下你的 memory_target是不是& ... -
ACLE表连接方式分析及常见用法
2011-03-23 09:14 1118摘要: 针对在数据仓库 ... -
ORACLE 外部表应用
2011-03-09 14:58 1075SQL> create or replace direc ... -
How to convert a 32-bit database to 64-bit database on Linux
2011-02-18 14:09 1222How to convert a 32-bit databas ... -
expdp impdp 数据库导入导出命令详解
2011-02-16 09:10 1962一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最 ... -
Oracle手工解/锁表
2011-01-25 14:15 2515手工锁表:lock table tbl_t1 in row ... -
oracle动态性能视图
2011-01-22 10:47 866Oracle动态性能视图个人整理 -
RBO规则介绍
2011-01-17 16:45 1095•无条件使用索引•使用内置的优先级别决定访问路径•比较难以 ... -
关于排序、sort_area_size、临时表空间
2011-01-13 15:30 1127简单陈述一下:针对每 ... -
创建索引ORACLE 需要做的工作
2011-01-13 14:53 1327一. 先来看一下创建索引要做哪些操作:1. 把inde ... -
表之间的连接
2011-01-13 10:42 804Join是一种试图将两个表结合在一起的谓词,一次只能连接2 ... -
重建索引的条件
2011-01-12 16:43 962如果索引存在碎片,那每个索引数据块上的索引数据就更少,会导致我 ... -
TKPROF使用学习
2011-01-10 17:38 734Tkprof工具可用来格式化sql trace产生的文件, ...
相关推荐
* 复合索引:包含两个或者多个字段的索引。 * 非键列:键列就是在索引中所包含的列,当然非键列就是该索引之外的列了。 摘要 1:在 SQL Server 2005 中,可以通过将非键列添加到非聚集索引的叶级别来扩展非聚集索引...
- **复合索引**:如果一个查询涉及多个列,可以创建复合索引,其中列的顺序至关重要,应将最常用于筛选的列放在前面。 - **NULL值与索引**:对于包含NULL值的列,B-Tree索引可能会降低性能,因为NULL在索引中被视为...
3. **利用索引覆盖查询**:如果查询中使用的列已经被索引所包含,则可以避免额外的表访问,这种现象称为索引覆盖。 4. **索引维护**: - 定期检查索引的有效性和完整性。 - 对于使用率低且占用空间大的索引,考虑...
下表总结了何时使用聚集索引或非聚集索引: | 动作描述 | 使用聚集索引 | 使用非聚集索引 | | --- | --- | --- | | 列经常被分组排序 | 应 | 不应 | | 返回某范围内的数据 | 应 | 不应 | | 小数目的不同值 | 不应 |...
描述中未提供更多信息,不过从标题我们可以推测,本文档可能是一篇专业指导性质的文章,旨在纠正用户在使用SQL Server数据库索引时的一些误区,帮助数据库管理员和开发者更高效地进行数据处理和查询优化。...
MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,用于存储和管理数据。索引在数据库中扮演着关键角色,它能够显著提升数据查询的效率。在MySQL中,索引的管理和创建是数据库性能优化的重要环节。NAVICAT...
当我们在数据库中执行查询时,如果没有索引,数据库系统需要遍历整个表来找到匹配的行,这在大数据量的情况下可能会非常耗时。而有了索引,数据库可以快速定位到所需的数据,大大提高了查询速度。 2. **创建索引**...
【计算机等考三级数据库辅导:谈索引使用的误区】 在数据库设计中,索引是一种重要的优化工具,用于加速数据检索。然而,对于索引的使用,存在一些常见的误区,这可能会导致性能下降而非提升。本文将探讨这些误区,...
本文将针对常见的几个索引误区进行详细解析。 误区1:建立了索引,查询时就一定会生效。实际上,SQL Server查询优化器会选择开销最小的执行计划,这取决于索引列的统计信息。例如,如果一个非聚集索引列有大量重复...
**分析**:尽管`s_code`是联合索引的一部分,但此查询没有包括联合索引的第一列`sname`,因此索引无法被使用。 3. **查询语句**: ```sql SELECT create_time FROM student WHERE address = '上海'; ``` **...
1. **INDEX SKIP SCAN**: 当创建了一个组合索引,但是查询只使用了索引的非第一列时,Oracle可能会选择不使用索引,因为它无法直接通过索引来定位数据。INDEX SKIP SCAN是一种优化策略,允许数据库跳过索引的第一个...
MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的概念与类型: - 索引是一种...
2. 复合索引:包含多个列,适用于多列联合查询。 3. 唯一索引:确保索引列的唯一性,提高查询效率。 4. 避免冗余索引:不要为已有复合索引的列单独创建索引。 三、索引设计原则 1. 索引列的选择:选择经常出现在...
3. **合理使用复合索引**:对于复合查询,可以考虑建立包含多个列的复合索引。在设计复合索引时,应将最常用的查询列放在前面。 4. **定期维护索引**:随着时间的推移,索引可能会变得不再高效。定期重建索引或对其...
- 组合索引:由两个或多个列组成的索引,可以是唯一性索引,但组合的列值不能重复,单个列值可以重复。 8.2 创建索引 创建索引可以通过企业管理器或T-SQL语句实现: - 使用企业管理器创建索引:包括选择表,选择...
数据库索引是一种提高查询效率的重要手段,但是如果不正确使用索引,可能会导致索引失效,影响查询效率。以下是导致索引失效的七字口诀: 模型数空运最快嗷 1. 模:模糊查询的问题 使用like关键字进行查询的时候...
例如,性别列上的非聚集索引在筛选性别时可能看似有用,但在查询多列时,如果其他未被索引的列参与筛选,优化器可能选择全表扫描而非索引查找,从而导致书签查找,这反而降低了性能。 误区2:聚集索引扫描代表高效 ...
索引可以使用 CREATE INDEX 语句创建,例如创建一个复合索引 i_sdept_sno 在 student 表的 sdept 和 sno 列上: CREATE INDEX i_sdept_sno ON student (sdept, sno DESC); 索引的使用 索引可以提高查询速度,例如...
例如,创建一个主键索引: ```sql CREATE TABLE insured_autos ( policy_id NUMBER, vin VARCHAR2(40), coverage_begin DATE, coverage_term NUMBER, CONSTRAINT pk_insured_autos PRIMARY KEY (policy_id, vin...
- 只有当查询中索引的第一列被用于条件时,多列索引才会被使用。如果查询只涉及到第二列或之后的列,索引将无法发挥作用。 7. **聚集函数与索引**: - `MAX`、`MIN`等函数在有索引的列上执行时,可以利用索引来...