sql查询语句优化

TheGodOfGods 2010-12-27 05:30:21
表结构,查询条件如下,自己也写了个查询语句,但总觉得不大好,请教大家是否有更好查询办法

if object_id('[CrowdMember]') is not null
drop table [CrowdMember]
go
if object_id('[MyUser]') is not null
drop table [MyUser]
go
/****** 对象: Table [dbo].[CrowdMember] 脚本日期: 12/27/2010 16:54:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MyUser](
[ID] [int] NOT NULL,
[OnLineState] [int] NOT NULL CONSTRAINT [DF_User_JoinState] DEFAULT ((0)), --在线状态
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[CrowdMember](
[ID] [int] NOT NULL,
[CrowdID] [int] NOT NULL,
[MemberUserID] [int] NOT NULL,
[JoinState] [int] NOT NULL,
CONSTRAINT [PK_CrowdMember] PRIMARY KEY CLUSTERED
(
[ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

insert into MyUser
select 1, 1 union all
select 2, 1 union all
select 3, 1 union all
select 4, 1 union all
select 5, 1
insert into [CrowdMember]
select 1, 1, 1, 0 union all
select 2, 2, 1, 0 union all
select 3, 3, 1, 0 union all
select 4, 1, 2, 0 union all
select 5, 2, 2, 0 union all
select 6, 3, 2, 0 union all
select 7, 1, 3, 0 union all
select 8, 2, 3, 0 union all
select 9, 3, 3, 0 union all
select 10, 1, 4, 0 union all
select 11, 2, 4, 0

--查找CrowdMember中与我同属于一个CrowdID的在线用户ID
SELECT distinct MyUser.ID FROM MyUser, CrowdMember AS MT, CrowdMember AS MS
WHERE MyUser.OnLineState = 1 AND MyUser.ID = MT.MemberUserID
AND MT.CrowdID = MS.CrowdID AND MS.MemberUserID != MT.MemberUserID AND MS.MemberUserID = 2

/*
ID
-----------
1
3
4

(3 行受影响)
*/
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheGodOfGods 2010-12-27
  • 打赏
  • 举报
回复
我觉得索引未失效的原因是因为在查询计划里边,关于MemberUserID的索引扫描下“已排序”标识为“TRUE"
TheGodOfGods 2010-12-27
  • 打赏
  • 举报
回复
谢谢Haiwer,
不过我还是有个疑问,在MemberUserID列上加索引,查询条件“AND MS.MemberUserID != MT.MemberUserID”为什么没有导致索引失效?
昵称被占用了 2010-12-27
  • 打赏
  • 举报
回复
先增加如下两个索引
 create ind_CrowdMember_CrowdID on CrowdMember(CrowdID)
go
create ind_CrowdMember_MemberUserID on CrowdMember(MemberUserID)
go
昵称被占用了 2010-12-27
  • 打赏
  • 举报
回复
语句没问题

数据量大的话增加必要的索引

34,587

社区成员

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

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