--看了不少Oracle中sql优化的文章,也介绍了很多不使用索引的情况,今天有空就测试了一下部分情况。
--测试数据
create table EMP
(
EMPNO VARCHAR2(10) not null primary key,
ENAME VARCHAR2(10),
JOB VARCHAR2(10),
MGR VARCHAR2(10),
SAL NUMBER(10),
DEPTNO NUMBER(10)
)
create index I_DEPTNO on EMP (DEPTNO);
create index I_JOB on EMP (JOB);
create index I_MGR on EMP (MGR);
create index I_SAL on EMP (SAL);
insert into emp values ('01','jacky','clerk','tom','1000','1');
insert into emp values ('02','tom','clerk','','2000','1');
insert into emp values ('03','jenny','sales','pretty','600','2');
insert into emp values ('04','pretty','sales','','800','2');
insert into emp values ('05','buddy','jishu','canndy','1000','3');
insert into emp values ('06','canndy','jishu','','1500','3');
insert into emp values ('07','biddy','clerk','','2000','1');
insert into emp values ('08','biddy','clerk','','2000','3');
commit;
--测试及结果:
select * from emp where deptno = 1;
--使用索引
select * from emp where deptno = '1';
--使用索引(类型转换不影响索引使用)
select * from emp where deptno*2 = 2;
--全表扫描(索引列使用函数时不使用索引)
select * from emp where deptno = 2/2;
--使用索引
select * from emp where ename = 'tom' and deptno = 1;
--使用索引
select * from emp where ename = 'tom' or deptno = 1;
--全表扫描 (当or条件列都存在索引时会使用索引)
select * from emp where sal != '0';
--全表扫描(!=,null,not null都不使用索引)
select * from emp where mgr = 'tom';
--使用索引(虽然mgr列存在null值还是使用了索引)
select * from emp where deptno in ('1','2','3');
--使用索引(in使用索引)
select * from emp where job like 'c%';
--使用索引(%在第一个字符时不使用索引)
select * from emp where deptno between 1 and 2;
--使用索引
--补充一个不使用索引的情况:多列创建索引时,索引第一列不在where中则不使用索引。
相关推荐
ORACLE-Select语句执行顺序及如何提高Oracle基本查询效率 在Oracle中,SQL语句的执行顺序是非常重要的。了解了SQL语句的执行顺序,我们可以更好地优化SQL语句,提高查询效率。下面我们将详细介绍ORACLE-Select语句...
根据提供的文件信息,我们可以归纳出一系列关于Oracle数据库中索引使用的知识点。这些知识点不仅包括了基本的索引创建与查询,还涉及到了分区表及其索引的管理。 ### Oracle索引的基本概念 #### 1. 创建索引 索引...
1. **基本查询**:SQL的基础是SELECT语句,用于从表中提取数据。例如,`SELECT column1, column2 FROM table_name;`用于获取指定列的数据。理解如何使用WHERE子句进行条件过滤,如`WHERE column = value`,以及如何...
在Oracle中,SQL语句执行效率低下通常表现为资源过度消耗,这可能包括CPU时间、内存使用、磁盘I/O等。具体分析可从以下几个方面入手: 1. **响应时间不达标**:当查询响应时间超出预期时,应检查SQL语句是否涉及...
应先分析查询计划,理解Oracle优化器的选择,并进行性能测试,确保使用索引能带来显著的性能提升。在某些情况下,优化SQL语句结构、调整索引策略,或者利用分区、索引组织表等技术,可能会比单纯依赖索引更有效。...
INSERT 语句还可以在插入数据时使用 SELECT 语句来从其他表中获取数据: INSERT INTO 表名(字段名 1, 字段名 2, ……)SELECT(字段名 1, 字段名 2, ……)FROM 另一个表名; 在插入字符串类型的字段时,必须使用...
本文档总结了 Oracle 中常用的 SQL 语句,包括数据库的创建、删除、备份、表的创建、删除、修改、索引的创建、视图的创建等基本操作,以及一些高级查询运算符的使用。 一、数据库操作 * 创建数据库:CREATE ...
3. **执行生成的语句**:生成的SQL语句可以直接复制并在Oracle环境中执行,或者将其保存到一个文件中批量执行。 #### 注意事项 - 在执行`ANALYZE TABLE`命令时,可能会消耗大量资源,特别是在大型表上。因此,在...
在Oracle 9i中,通过`ALTER INDEX`命令可以开启或关闭对索引使用情况的监控。要开始监控某个索引,可以使用如下命令: ```sql ALTER INDEX index_name MONITORING USAGE; ``` 若要停止监控,使用: ```sql ALTER ...
Oracle和MySQL语句存在许多不同之处,包括数据类型、Select语句、Join语句、Subquery语句、索引、触发器和存储过程等。但是,两者的基本原理和架构都是基于SQL语言的,因此学习和使用Oracle或MySQL都需要对SQL语言有...
在 SQL 语句中使用 NULL 会有很多的麻烦。因此,建议开发人员在建表时,把需要索引的列设成 NOT NULL。如果被索引的列在某些行中存在 NULL 值,就不会使用这个索引(除非索引是一个位图索引)。 限制3:使用函数 ...
1. **数据查询(SELECT语句)**: - `SELECT * FROM table_name;`:查询表table_name中的所有列。 - `SELECT column1, column2 FROM table_name;`:查询指定列。 - `SELECT DISTINCT column FROM table;`:去除...
Oracle数据库是世界上最广泛使用的数据库管理系统之一,特别是在企业级应用中,其性能优化和问题排查显得尤为重要。本篇文章将总结一些常用的Oracle性能分析和查询语句,帮助管理员了解系统运行状况,定位并解决性能...
在IT领域,尤其是在数据库管理与开发中,Oracle作为一款广泛使用的数据库管理系统,其经典常用的SQL语句对于数据库管理员(DBA)以及开发人员而言至关重要。本文将深入解析Oracle中的关键SQL语句,涵盖表约束、索引...
Oracle数据库中的索引是提升查询性能的关键工具,它允许数据库快速定位和检索数据。本篇文章将深入探讨Oracle索引的学习,重点关注索引的原理、类型、优缺点以及如何使用和分析执行计划。 首先,理解索引的基本概念...
Oracle 索引与分区索引是 Oracle 数据库中两个重要的概念,它们都是为了提高查询性能和数据存储效率而设计的。在本文中,我们将详细介绍 Oracle 索引与分区索引的概念、特点、分类、创建方法、维护操作等方面的知识...
- **查询数据**:使用SELECT语句从表中检索数据,是数据库操作中最常用的部分。 ```sql SELECT * FROM 表名; SELECT 列1, 列2 FROM 表名 WHERE 条件; ``` 以上就是Oracle中关于基本建表语句及操作的主要内容。通过...
3. 尽量避免在SELECT子句中使用“*”,而应该具体指定需要查询的字段。 4. 减少对数据库的访问次数,避免不必要的重复查询。 5. 使用DECODE函数,可以减少处理时间。 6. 整合简单、无关联的数据库访问可以减少I/O...
在文件名中提到的"oracle常用sql语句.txt"可能包含Oracle的一些常见操作,如`SELECT`用于查询,`INSERT INTO`用于插入数据,`UPDATE`用于修改记录,`DELETE FROM`用于删除记录,以及`ALTER TABLE`用于修改表结构等。...