多表关联时的查询速度问题

libingao 2004-12-23 03:04:03
我今有三个表 A、B、C,他们间通过 A.ID = B.ID AND B.NO = C.NO 关联,
现在我从 A 中取出字段 A.A1 和 A.A2,查询条件是:B.B1 = 'X' AND C.C1 = 'Y'
已知三个表中的记录数都很多,超过 200 万行,请问以下 SQL 语句执行速度那个快:
SELECT A.A1,A.A2 FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON B.NO = C.NO
WHERE B.B1 = 'X' AND C.C1 = 'Y'

SELECT A.A1,A.A2 FROM A WHERE A.ID IN
(SELECT B.ID FROM B WHERE B.B1 ='X' AND B.NO IN
(SELECT C.NO FROM C WHERE C.C1= 'Y'))

要分三个表都有索引、都没有索引、部分有索引 三种情况,因为我发现三种情况下的结果好像不同 !
欢迎来指教,有什么更好的方法么 ???
...全文
110 点赞 收藏 12
写回复
12 条回复
axiang80 2005年01月06日
去sql版吧搜吧,分页存储过程
回复 点赞
libingao 2005年01月06日
请问如何去分页,我没分过呀 !
回复 点赞
libingao 2004年12月31日
请问如何去分页,我没分过呀 !
回复 点赞
aohan 2004年12月30日
要看你有多少数据,索引建立的是否合理。
回复 点赞
skywolfY 2004年12月30日
这问题要看程序怎么做的,如果有分页,就能很快,如果客户不允许分页,那只能听天由命了。
如果分页,可以很快。以前有很多这样的贴子。
回复 点赞
libingao 2004年12月30日
up
回复 点赞
lndlwwh830 2004年12月28日
1。给你要查询的表的字段加上索引
2.在写sql语句的时候尽量不要写"select * from ……",而是根据你所需要的字段列举出来
3。用存储过程能提高速度
回复 点赞
libingao 2004年12月28日
还有其他办法吗???
我现在是在别人的程序上作二次开发,那几个 200 万行以上记录的表早已存在,我要从中读取相关数据!
视图我也试过,也是不行,经常保 超时 错误 !
回复 点赞
of123 2004年12月24日
200 万行以上!
如果追求速度,何不分类存成多个表。
回复 点赞
myhgyp 2004年12月24日
建议把常用的建成“视图表”,这样在取数据时只要对视图进行查询就可以了
回复 点赞
libingao 2004年12月24日
现在问题是:我仅从一个表中读取满足条件的一个字段时的速度就很慢(200 万行以上记录有索引)!
回复 点赞
roger_xiong 2004年12月23日
join 多了速度自然是会变的非常慢,最后的办法是建立临时表,尽量减少join的层数~

查询完后把临时表删除就好了,这样速度会快很多。

我们公司现在就是这样子处理的。
回复 点赞
发动态
发帖子
VB基础类
创建于2007-09-28

2744

社区成员

19.7w+

社区内容

VB 基础类
社区公告
暂无公告