今天又遇到了个问题,我在应用中发现我们的一个web列表显示的特别慢,列表只是简单的将数据单表数据order 下输出,并且是对
create table T_ATTACKEVENT
(
ATTEVNT_ID_N NUMBER not null,
ATTEVNT_SIP_C VARCHAR2(15) not null,
ATTEVNT_SPORT_N NUMBER not null,
ATTEVNT_DIP_C VARCHAR2(15) not null,
ATTEVNT_DPORT_N NUMBER not null,
ATTEVNT_PROTOCOL_C VARCHAR2(10),
ATTEVNT_TIME_C TIMESTAMP(6) not null,
ATTEVNT_NOOFDAY_N NUMBER not null
)
alter table T_ATTACKEVENT
add constraint PK_ATTACKEVENT primary key (ATTEVNT_ID_N)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
select * from t_attackevent_0809 t order by t.attevnt_id_n desc
select * from t_attackevent t order by t.attevnt_id_n desc,我以为会默认走主键索引排序,但是当我看执行计划时却发现如下图
采用的是全表查询,经过网上查询发现oracle自动优化,在面对这种情况时会认为全表更有效率而不是采用索引,
解决方法
1.我们这个应用可以考虑以时间字段排序,即
select * from t_attackevent t order by t.attevnt_time_c desc,这种方式即用到了我们在时间上的索引,效率也是可以接受的。
2.如果更广泛一些的情况,我们只有一个主键索引,我们必须使用order by pk ,这时候为了使用index可以采用hint
select /*+index(t PK_ATTACKEVENT)*/* from t_attackevent t order by t.attevnt_id_n desc
(注意hint之间的空格,这个很关键).
- 大小: 35.3 KB
分享到:
相关推荐
在没有唯一索引或主键约束的情况下,数据库无法保证相同值的记录在排序后的精确位置。 排序的稳定性在某些场景下至关重要,比如在保持数据原有顺序或者进行聚合操作时。在数据结构领域,稳定的排序算法(如冒泡排序...
第一部分是最内层的 SQL,用于按 `NO` 和 `VALUE` 排序,并列出行号: ```sql select a.No, a.Value, a.Name, row_number() over(order by a.No, a.Value desc) rnFirst from Test a; ``` 这部分的结果如下: | ...
在本教程中,你会学习如何使用SELECT语句进行复杂查询,比如JOIN操作来合并多个表的数据,GROUP BY和HAVING子句进行分组和过滤,以及ORDER BY进行排序。此外,DML语句(INSERT、UPDATE、DELETE)用于管理数据,DDL...
- **B树索引(B-Tree Index)**: 最常见的索引类型,适用于等值查询,根据索引键的排序顺序查找数据。 - **位图索引(Bitmap Index)**: 适合于在含有大量重复值的列上,尤其是在进行多列组合查询时,将多个位图...
由于 `ROWNUM` 在 Oracle SQL 中是在查询执行时分配的,因此在子查询中先对 `sal` 排序,再在外部查询中限制返回的行数,以获取最高工资的前三名员工。正确SQL如下: ```sql SELECT * FROM ( SELECT * FROM ...
Excel的便利性和灵活性使得用户可以方便地编辑和调整表结构,如添加、删除或修改列,设置主键、外键和索引等。工具会读取这些信息并自动生成相应的SQL脚本。 在使用这个工具时,用户首先需要在Excel中创建一个模板...
同样,内存的大小直接影响Oracle的数据缓冲和内存排序效率。如果内存不足,会导致频繁的内存分页,从而增加磁盘I/O。因此,DBA需要确保服务器有足够的CPU和内存资源,并使用如vmstat、glance、top或sar等工具监控...
"oracle数据工程师面试题.pdf" 本资源是一个Oracle数据工程师面试题库,涵盖了多个关于Oracle数据库管理和开发的问题。下面是从文件中提取的知识点: 1. 数据类型和操作 * varchar2数据类型:varchar2是Oracle中...
- **索引**:索引字段没有重复值,但可以有一个空值,索引主要用于提高查询排序的速度。 #### 三、聚集索引与非聚集索引的区别 - **聚集索引**:在索引页里直接存放数据,一个表只能有一个聚集索引。 - **非聚集...
在Oracle笔记的第一天,我们主要探讨了数据库的基本概念、Oracle的工作方式、简单的查询操作、数据去重、排序以及条件判断。 首先,数据库是存储和管理数据的软件,其中最常见的是RDBMS,如Oracle、MySQL、SQL ...
高级查询涉及联接(JOIN)、子查询、聚合函数(COUNT、SUM、AVG等)和分组(GROUP BY)、排序(ORDER BY)等,能实现更复杂的多表查询和数据分析。 这个教程对于Oracle数据库初学者来说是非常有价值的,它涵盖了从...
同时,学会使用WHERE子句进行条件筛选,ORDER BY进行排序,GROUP BY进行分组,以及JOIN操作连接多个表。 在数据库设计中,了解关系模型理论,如实体、属性和关系,是必要的。Oracle支持多种表类型,如普通表、索引...
1. `ALL_CONS_COLUMNS` 和 `ALL_CONSTRAINTS`:这两者结合可以找出表间的约束关系,如主键和外键。 2. `DBA_DEPENDENCIES`:追踪对象间的依赖关系,帮助理解哪些表可能是从表。 至于数据的导入导出,Oracle提供了...
在实际应用中,例如组织结构的展示,我们可以创建一个包含部门信息的表`SYS_DEPT`,其中`dept_id`为主键,`par_dept_id`表示父级部门ID,以此建立层级关系。通过递归查询,我们可以轻松地获取任意部门及其所有子部门...
学习如何使用WHERE子句进行条件筛选,ORDER BY进行排序,GROUP BY进行分组以及HAVING进行分组后的条件过滤。 4. **DML语句**:Data Manipulation Language,包括INSERT、UPDATE、DELETE,分别用于插入新记录、修改...
12. 排序合并连接 13. 对索引字段使用 MAX 或 MIN 函数 14. ORDER BY 索引字段 15. 全表扫描 RBO 优化器会根据规则选择执行计划,但这种方法有其局限性,不能够根据实际情况进行调整。 基于成本的优化器(CBO) ...
1. **查询操作**:Oracle的SQL查询语句基于标准SQL,但支持更复杂的子查询、连接操作、聚合函数(如COUNT、SUM、AVG等)以及分组(GROUP BY)和排序(ORDER BY)。例如,找出每个部门的平均薪水: ```sql SELECT ...
7. `order by a.table_name`:为了使结果更加清晰有序,根据主键表名称进行排序。 通过对上述SQL语句的分析,我们可以发现,这个查询语句是通过几个Oracle数据字典视图的关联查询来实现查看主外键约束关系的目的。...
4. **数据浏览**:用户可以直接浏览数据库中的表结构,包括字段名、数据类型、主键信息等,也可以查看单个表中的数据记录。 5. **事务处理**:支持提交和回滚事务,确保数据的一致性和完整性。 6. **对象管理**:...