SQL优化

wo554006164 2010-09-28 03:00:42
A表有35W条数据

视图A查询该表

CREATE TABLE A(
[id] [int] IDENTITY(1,1) NOT NULL,
[username] [nvarchar](50) NOT NULL,
[typeid] [nchar](1) NOT NULL,
[flag] [int] NOT NULL DEFAULT (0),
[addtime] [datetime] NOT NULL--还很多字段,这儿只列出主要的
CONSTRAINT [PK_iesoo_qyml] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PRIMARY]
) ON [PRIMARY]

--视图A
CREATE VIEW View_A
AS
begin
SELECT username,typeid,flag,addtime
FROM A
WHERE (typeid= 'A') AND (flag = 1)
end

--测试查询
SELECT COUNT(1) FROM A --有30几万条数据
SELECT COUNT(1) FROM View_A --有20几万条数据

------问题:
SELECT username,count(1) N FROM View_A
GROUP BY username

--这个分组查询需要5秒。能不能更快些啊?
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsforever 2010-09-28
  • 打赏
  • 举报
回复
1,加个索引在 typeid & flag 上或只加在typeid上 include flag
2,重新构建视图

再查询看看
Q315054403 2010-09-28
  • 打赏
  • 举报
回复
不同的索引对不同的SQL有不同的效果
要求不说完,次次改,没有人能回答完
wo554006164 2010-09-28
  • 打赏
  • 举报
回复
加了的。。


SELECT COUNT(1) FROM View_A --有20几万条数据
这句就要执行4秒
cjzm83 2010-09-28
  • 打赏
  • 举报
回复

CREATE VIEW View_A
WITH SCHEMABINDING
AS
SELECT username,typeid,flag,addtime
FROM A
WHERE (typeid= 'A') AND (flag = 1)


CREATE CLUSTERED INDEX idx_username
ON View_A (username);



ws_hgo 2010-09-28
  • 打赏
  • 举报
回复
加个索引试下
create index IX_type on A (typeid,flag )
yhtapmys 2010-09-28
  • 打赏
  • 举报
回复
加索引没?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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