仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 984|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL编程:一段优化排序的Sql语句

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:53:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于IT经理来说,令他们喜欢的MySQL的简单性还有另一方面。MySQL可以运行的更快速。某些人或许会说MySQL缺少了一些人们想要的功能。排序|优化|语句
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[OrderOptimize])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[OrderOptimize]
GO

SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSOFF
GO

CREATEProcedureOrderOptimize

(
@IDint,
@intOrderint,
@TableNamevarchar(50)
)
AS


BEGINTRANSACTIONTransOrderOptimize

Declare@SqlStrnvarchar(500)
Declare@iint
Declare@CursorSqlnvarchar(500)
Declare@UpdateOrdernvarchar(500)
declare@TempIdint
--declare@CursorNamevarchar(50)
--print(Nupdate+cast(@TableNameasvarchar(50))+setintOrder=+cast(@intOrderasint)+whereID=+@ID+);
begin

set@SqlStr=Nupdate+cast(@TableNameasvarchar(50))+setintOrder=+cast(@intOrderasvarchar(50))+whereID=+cast(@IDasvarchar(10))+;

execsp_executesql@SqlStr;
end

Begin
setnocounton
set@i=0;
--set@CursorName=product;
--set@SqlTemp=NselectIDfrom+cast(@TableNameasvarchar(50))+ORDERBYintOrder;
--declareOrder_Cursorcursorforsp_executesql@SqlTemp

declare@tempnvarchar(500)
set@temp=NdeclareOrder_CursorcursorforselectIDfrom+cast(@TableNameasvarchar(50))+ORDERBYintOrder
execsp_executesql@temp

openOrder_Cursor
fetchnextfromOrder_Cursorinto@TempId

while@@FETCH_STATUS=0
Begin
--print@TempId;
set@i=@i+1;
set@UpdateOrder=NUpdate+cast(@TableNameasvarchar(50))+SetintOrder=+cast(@iasvarchar(10))+whereID=+cast(@TempIdasvarchar(10))+;
--print@UpdateOrder;
executesp_executesql@UpdateOrder
fetchnextfromOrder_Cursorinto@TempId
End

CLOSEOrder_Cursor
DEALLOCATEOrder_Cursor
End


if@@error0
Begin
raiserror(排序优化失利,请与开辟商接洽!,16,1)
RollBackTransactionTransOrderOptimize
Return99
end

CommitTransactionTransOrderOptimize
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO


应用程序需要使用数据库,数据库本身需要设计、开发和部署。还有MySQL学习教程,客户怎样实施混合系统,或者需要帮助管理多个云服务?
透明 该用户已被删除
沙发
发表于 2015-1-20 05:54:05 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-25 23:11:22 来自手机 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-4 10:03:15 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
活着的死人 该用户已被删除
5#
发表于 2015-2-9 22:03:39 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
爱飞 该用户已被删除
6#
发表于 2015-2-27 23:35:16 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
莫相离 该用户已被删除
7#
发表于 2015-3-9 15:29:34 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
不帅 该用户已被删除
8#
发表于 2015-3-17 00:08:05 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
精灵巫婆 该用户已被删除
9#
发表于 2015-3-23 08:10:42 | 只看该作者
无法深入到数据库系统层面去了解和探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 20:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表