这条SQL如何写运行时间最短?

dgcat_6 2002-03-11 04:36:55
我有两个表 A ,B。其中A 表积累了大约1万多条记录,并且每天最少还有几十条记录生成 。根据业务需要,B表每天从A 表和其他表采集数据。我的问题是,我要把A表中已经被B 表采集过的记录屏蔽,而仅仅显示尚未被采集过的记录。
我知道可以这样写:
SELECT A.a ,A.b,A.c ...FROM A
WHERE A.a NOT IN (SELECT B.a FROM B )
AND <WHERE TJ>;
或者:
SELECT A.a ,A.b,A.c ...FROM A ,B
WHERE A.a =B.a(+) AND B.a IS NULL
AND <WHERE TJ>;
但经实践检验,速度都很慢。至少要等待3、4分钟。不知有什么更好的办法提高速度?
欢迎讨论。
...全文
49 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dgcat_6 2002-03-12
  • 打赏
  • 举报
回复
谢谢各位。首先,我的A、B都是有索引的。我试了 MINUS,快了一些。但没有质的飞跃。各位有更好的办法吗?
zhuzhichao 2002-03-11
  • 打赏
  • 举报
回复

not in是用不到索引的.
用你寫的外連接只要用到索引了就不會很慢.
zhuzhichao 2002-03-11
  • 打赏
  • 举报
回复

你肯定沒有對A,B上的a建索引.
或者根本沒有用到索引.
eygle 2002-03-11
  • 打赏
  • 举报
回复
用minus也比你用not in 快得多
你试试
select a.* from a
minus
select b.x from b
jornk 2002-03-11
  • 打赏
  • 举报
回复
建A,B的a上的INDEX
jornk 2002-03-11
  • 打赏
  • 举报
回复
试试看
select A.* from A
where exists (select * from B where B.a=A.a)
and <WHERE TJ>;

SELECT A.a ,A.b,A.c ...FROM A ,B
WHERE <WHERE TJ>;
AND A.a =B.a(+) AND B.a IS NULL
mycode 2002-03-11
  • 打赏
  • 举报
回复
首先,检查A表和B表是否在这段a上建立索引.
其次,由于你需要的是A表的记录,还要一种写法
select * from A
where a in (
select a from A
minus
select b from B)
And <WHERE TJ>;
可以试一试.
内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧