1, join的字段建立索引
2, 小计用rollup
2, 小计用rollup
解决方案 »
- 只有高手才能弄出来的SQL 跪求!!
- 请问本机SERVER2000 连不上是怎么回事?在线等
- 保留时间离与当前最近的两条记录. 散分
- 求一SQL语句
- 如何在Windows3.2下编程访问SQL Server2000?
- 只有ldf文件,能恢复数据库吗?
- 错误: 17889,严重性: 16 because the maximum number
- 不在事务中的select *...是不是在运行是会有共享锁,update ...在运行是会有更新锁
- 小菜送给熟悉 (ACCESS && ATL ole db 类)的开发者 100 分:
- 关于SQL SERVER6.5 数据移植的问题。谢谢各位。
- 请问SQL报这个错误是什么意思
- 怎样获取sql server的 表每行的索引?
另外,你上下两个GROUP BY 后跟的字段都不一样,不能用with rollup。
SELECT
case when grouping(CompanyName=1) then '小计' end project,
G.CompanyName AS ClientName,
E.CompanyName AS WhName,
F.WhPosition,
B.GoodsNum,
B.GoodsName,
B.GoodsSpec,
C.DictName AS GoodsUnit,
A.WhPos,
A.ProdDate,
A.SerialNum,
D.DictName AS GoodsStatus,
A.WareHouseNo,
SUM(A.IOCount / C.MaxConverRate) AS StoreCount
FROM tb_Wh_AccountBook A
INNER JOIN tb_Bas_ClientGoods B ON A.GoodsGuid = B.GoodsGuid
INNER JOIN vw_Bas_GoodsUnit C ON B.GoodsUnitGuid = C.GoodsUnitGuid And B.GoodsGuid=C.GoodsGuid
INNER JOIN tb_Sys_Dict D ON A.StatusGuid = D.DictGuid
INNER JOIN tb_Bas_Company E ON A.WhGuid = E.CompanyGuid
INNER JOIN tb_Wh_Position F ON A.WhNumGuid = F.WhPosGuid
INNER JOIN tb_Bas_Company G ON A.ClientGuid = G.CompanyGuid
GROUP BY
G.CompanyName,
E.CompanyName,
F.WhPosition,
B.GoodsNum,
B.GoodsName,
B.GoodsSpec,
C.DictName,
A.WhPos,
A.ProdDate,
A.SerialNum,
D.DictName,
A.WareHouseNo
with rollup
having SUM(A.IOCount / C.MaxConverRate)>0
order by
ClientName,
WhName,
WhPosition,
GoodsNum,
GoodsUnit,
project,
WhPos--建立索引 create index indexname on tb(col1,col2...)消息 1027,级别 15,状态 1,第 36 行
GROUP BY 子句中指定的表达式太多。当指定了 CUBE 或 ROLLUP 时,表达式的最大数目为 10。
-->
union all
inner join 大表
以此类推 另外加索引
tb_Wh_AccountBook tb_Bas_ClientGoods vw_Bas_GoodsUnit tb_Sys_Dict tb_Bas_Company tb_Wh_Position tb_Bas_Company
这些表更新数据的时候进行一下 update
'小计', G.CompanyName, E.CompanyName, F.WhPosition,B.GoodsNum, B.GoodsName, B.GoodsSpec,
C.DictName,null,null, null,null,null, SUM(A.IOCount / C.MaxConverRate)
再执行你的查询时间可以缩短一半.
总是使用表变量来代替临时表,但是表变量没有索引(只有一个主键)。
不知道sqlserver对于中间的子查询,会不会自动建立临时的索引?
使用临时表会产生磁盘写入,会不会影响性能?
1.有,,不会很大,写入的也很快的。
总是使用表变量来代替临时表,但是表变量没有索引(只有一个主键)。
2.没必要用表变量,数据稍微多点你的内存就怕吃紧了。
不知道sqlserver对于中间的子查询,会不会自动建立临时的索引?
3.还是用临时表,临时表是可以建立索引的。
CREATE NONCLUSTERED INDEX IDX_TempCol1 ON #TMP(Col1)
简单的说一次全部join和 放临时表再join几次 二者之间的区别:join几次放临时表再join 避开了一次全部join 时的io峰值。道理跟 一条update语句去更新 一个 1000w 的数据表一样
可以写循环 每 1w行更新一次。