Sql Oracle多列索引:确定最近的一对(年份、学期)
请假设Oracle表中有多列索引:Sql Oracle多列索引:确定最近的一对(年份、学期),sql,oracle,max,Sql,Oracle,Max,请假设Oracle表中有多列索引: CREATE INDEX MY_USER.MY_INDEX ON MY_USER.MY_TABLE (YEAR, SEMESTER); 第四列是年份。 专栏学期第一 确定最近几年、最近几学期最有效的方法是什么 我是这样想的: select max(YEAR) into MY_YEAR from MY_TABLE; select max(SEMESTER) from MY_TABLE where YEAR = MY_YEAR; 还有其他线索吗 非常感谢您考
CREATE INDEX MY_USER.MY_INDEX ON MY_USER.MY_TABLE
(YEAR, SEMESTER);
第四列是年份。
专栏学期第一
确定最近几年、最近几学期最有效的方法是什么
我是这样想的:
select max(YEAR) into MY_YEAR from MY_TABLE;
select max(SEMESTER) from MY_TABLE where YEAR = MY_YEAR;
还有其他线索吗
非常感谢您考虑我的请求
编辑:该表有超过5000万条记录
第二次编辑:我正在使用此Oracle版本:
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.5.0 - Productio
NLSRTL Version 10.2.0.5.0 - Production
问:什么是最有效的方式来确定最近几年,学期 如果这是一个不需要优化的一次性查询,那么 选择MAXTO_CHARYEAR | | TO_CHARYEAR 从我的桌子上 这不是一个优雅的解决方案,但它是有效的。如果学期数只能是1或2,这可能是有效的:
with t as
(select max(year), 1 as semester
from MY_TABLE
where semester = 1
union all
select max(year), 2 as semester
from MY_TABLE
where semester = 2)
select MAX(TO_CHAR(YEAR) || TO_CHAR(SEMESTER))
from t;
当然,这不是一个通用的解决方案,但它应该适用于您的情况
更新:
另一个想法是:
SELECT year, semester
FROM MY_TABLE
ORDER BY year, semester
FETCH FIRST 1 ROWS ONLY;
Oracle 12.1中引入了,如果我们采用Kevinsky的解决方案,并添加一个由两个字段串联而成的字段,该怎么办。然后我们可以在字段上添加索引 例如:
alter table MY_TABLE add (concatenated as TO_CHAR(YEAR) || TO_CHAR(SEMESTER))
CREATE INDEX MY_INDEX ON MY_TABLE(concatenated)
这是两个完全不同的查询。请给出示例输入数据和预期输出。我不认为这是两个完全不同的查询。第一个查询计算MY_表中的maxYEAR。第二个查询确定MY_表中的MaxSerment,假设YEAR=MAXYEAR刚刚确定。选择YEAR,Serm from select YEAR,Serm,rownm as rn from MY_表中的order by YEAR desc,Serm desc,其中rn=1;一匹没有名字的马:它挂断了,因为整张桌子上的年份和学期总是一样的。。。。。现在!!如果它们总是相同的,那么为什么你需要找到最大值呢?随便你。如果所有的值都相同,索引也没有任何帮助。请使用解决方案完全访问表。它挂断了。我的_表有超过5000万条记录。刚刚添加了一个编辑行。我正在使用Oracle 10G。我刚刚编辑了我的问题并添加了此信息。我们可以创建基于函数的索引,而不是添加新列,但我会避免这样做。