多表关联如何优化,急哦!

wgybb 2008-03-13 06:16:16
我现在有四张表分别如下:
Buy(ID[PK],SmallClassID,shi,qu,Title,IsCheck)
SmallClass(ID[PK],SmallClassName)
shi(ID[PK],shiName)
qu(ID[PK],quName)

进行关联的语句如下:
SELECT Buy.ID,Buy.Title,Buy.SmallClassID,shi.shiName,qu.quName,SmallClass.SmallClassName FROM (SELECT * FROM Buy WHERE SmallClassID=68 and shi=1 and IsCheck=1) AS Buy,shi,qu,SmallClass WHERE Buy.shi=shi.ID AND Buy.qu=qu.ID AND Buy.SmallClassID=SmallClass.ID

Buy表里面有50000多条记录,其它三个表数据量非常小,现在执行起来有CPU为80-100之间,请教各位这条语句是否能再忧化一些。Buy这个表的涉及有INSERT,UPDATE,DELETE这些操作,有时候只与其中一个表关联,有时候也可能与两个表进行关联。我想建索引,试问该怎样建才好
1:在Buy表里面分别对shi,qu,SmallclassID建三个索引
2:还是建一个组合索引create index IX_Buys on buy(shi,qu,SmallClass)

或者有更好的办法,请大指点一下,谢谢!

如果我建一个组合索引的话,那么假如当Buy表只与SmallClass表进行关联的时候,这个组合索引能不能起到作用呢?

还有一点,我上面写的关联语句如果换成INNER JOIN这个,效率上有区别吗?
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2008-03-15
  • 打赏
  • 举报
回复
打错一个字母:

select b.id,b.title,b.smallclassid,s.shiname,q.quname,sc.smallclassname
from buy b inner join shi s on s.id=b.shi
inner join qu q on q.id=b.qu
inner join smallclass sc on sc.id=b.smallclassid
where b.smallclassid=68 and b.shi=1 and b.IsCheck=1
-晴天 2008-03-15
  • 打赏
  • 举报
回复
试试这样:

select b.id,b.title,b.smallclassid,s.shiname,q.quname,sc.smallclassname
from buy b inner join shi s on s.id=b.shi
inner join qu q on q.is=b.qu
inner join smallclass sc on sc.id=b.smallclassid
where b.smallclassid=68 and b.shi=1 and b.IsCheck=1

看会不会好一点.
感觉建复合索引没太大帮助.
wangjihong83 2008-03-15
  • 打赏
  • 举报
回复
刚学不知道!看不懂!
昵称被占用了 2008-03-14
  • 打赏
  • 举报
回复
1、不要用子查询,直接连接
SQL codeSQL codeSELECT Buy.ID,Buy.Title,Buy.SmallClassID,
shi.shiName,qu.quName,SmallClass.SmallClassName
FROM Buy,Shi,Qu, SmallClass
WHERE Buy.SmallClassID=68 and Buy.shi=1 and Buy.IsCheck=1
and Buy.shi=shi.ID AND Buy.qu=qu.ID AND Buy.SmallClassID=SmallClass.ID
2、建一个组合索引create index IX_Buys on buy(SmallClass,shi,IsCheck),但是必须 注意这三个字段在Buy表的重复率,重复率低的排在前面



wgybb 2008-03-14
  • 打赏
  • 举报
回复
不是的,昨天晚上CSDN出问题了,一直发不上去,谁知道发了这么多。
-狙击手- 2008-03-13
  • 打赏
  • 举报
回复
嘻,这个兄弟 的分真多,
dawugui 2008-03-13
  • 打赏
  • 举报
回复
语句没什么优化的.

主要是各表要建立主键.
要连接的字段建立索引.
JiangHongTao 2008-03-13
  • 打赏
  • 举报
回复
SELECT Buy.ID,Buy.Title,Buy.SmallClassID,shi.shiName,qu.quName,SmallClass.SmallClassName
FROM Buy join shi on Buy.shi=shi.ID join qu on Buy.qu=qu.ID
join SmallClass on Buy.SmallClassID=SmallClass.ID
where buy.SmallClassID=68 and buy.shi=1 and buy.IsCheck=1

感觉分别建索引好。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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