数据库关联查询性能

drc606 2010-07-13 06:28:08
现有两个表:信息表A, 分类表B
A表:
id | sortid1 | sortid2 | info
-----------------------------------------
1 | 1 | 3 | info
-----------------------------------------
2 | 2 | 4 | info2
-----------------------------------------
| | |

B表
sortid | name |
---------------------
1 | 分类1 |
---------------------
2 | 分类2 |
---------------------
3 | 分类3 |
---------------------
4 | 分类4 |
---------------------
| |

现在要通过A、B查询出如下信息
id | sortid1 | name1 | sortid2 | name2 |info
-------------------------------------------------------------
1 | 1 | 分类1 | 3 | 分类3 | info
-------------------------------------------------------------
2 | 2 | 分类2 | 4 | 分类4 | info2
-------------------------------------------------------------
| | | | |

请给出相关查询语句,因为两个表的数据量都会比较大,所以需要考虑查询性能

另:如果将上面的查询做成视图在搜索的时候性能会提高吗?
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_liucj 2010-07-16
  • 打赏
  • 举报
回复
select id, sortid1, b.name as name1, sortid2, c.name as name1, info from ta a left join tb b on a.sortid1=b.sortid left join tb c on a.sortid2=c.sortid
drc606 2010-07-16
  • 打赏
  • 举报
回复
都没人回答
再顶下
drc606 2010-07-14
  • 打赏
  • 举报
回复
我这样的数据设计在数据量很大的时候会不会很影响性能?
大家有没有更好的数据设计?
bancxc 2010-07-14
  • 打赏
  • 举报
回复
好久不见影子哥[Quote=引用 4 楼 beirut 的回复:]
引用 3 楼 herowang 的回复:

视图可以简化操作,不能提高性能。可以尝试建立索引视图

好久不见影子哥
[/Quote]
yangfan201 2010-07-14
  • 打赏
  • 举报
回复
视图可以简化操作,不能提高性能。可以尝试建立索引视图
黄_瓜 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 herowang 的回复:]

视图可以简化操作,不能提高性能。可以尝试建立索引视图
[/Quote]
好久不见影子哥
  • 打赏
  • 举报
回复
视图可以简化操作,不能提高性能。可以尝试建立索引视图
SQL77 2010-07-13
  • 打赏
  • 举报
回复
另:如果将上面的查询做成视图在搜索的时候性能会提高吗?

做成视图就能提高?


SELECT ID,RORTID1,B.NAME AS NAME1 , sortid2,C.NAME AS NAME2,INFO 
FROM A LEFT JOIN B ON A.RORTID1=B.RORTID
LEFT JOIN B C ON A.RORTID2=B.RORTID
Mr_Nice 2010-07-13
  • 打赏
  • 举报
回复

/*
[Author]: OrchidCat[OC]_轻骑兵(向高手学习...)
[Time]: 2010-07-13 18:19:58
[Place]: From Beijing
[Version]:
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)
Feb 9 2007 22:47:07
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

*/
--> 测试数据:[A1]
if object_id('[A1]') is not null drop table [A1]
create table [A1]([id] int,[sortid1] int,[sortid2] int,[info] varchar(5))
insert [A1]
select 1,1,3,'info' union all
select 2,2,4,'info2'

--> 测试数据:[B2]
if object_id('[B2]') is not null drop table [B2]
create table [B2]([sortid] int,[name] varchar(5))
insert [B2]
select 1,'分类1' union all
select 2,'分类2' union all
select 3,'分类3' union all
select 4,'分类4'

select * from [A1]
select * from [B2]


SELECT A1.id,sortid1,B2.NAME,A1.sortid2,B.NAME,A1.[Info]
FROM dbo.A1
LEFT JOIN B2 ON A1.sortid1 = B2.sortid
LEFT JOIN B2 B ON A1.sortid2 = B.sortid

/*
id sortid1 NAME sortid2 NAME Info
----------- ----------- ----- ----------- ----- -----
1 1 分类1 3 分类3 info
2 2 分类2 4 分类4 info2

(2 行受影响)
*/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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