MYSQL网页设计出色的近乎完善的分页存储历程
如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL。然而,如果你的项目不是在GPL协议下的话,你必须为使用MySQL来支付许可费用,或者你可能因为这个因素而将你的项目改为遵循GPL。存储历程|分页CREATEproceduremain_table_pwqzc(@pagesizeint,
@pageindexint,
@docountbit,
@this_id)
as
if(@docount=1)
begin
selectcount(id)fromluntanwherethis_id=@this_id
end
else
begin
declare@indextabletable(idintidentity(1,1),nidint)
declare@PageLowerBoundint
declare@PageUpperBoundint
set@PageLowerBound=(@pageindex-1)*@pagesize
set@PageUpperBound=@PageLowerBound+@pagesize
setrowcount@PageUpperBound
insertinto@indextable(nid)selectidfromluntanwherethis_id=@this_idorderbyreply_timedesc
selecta.*fromluntana,@indextabletwherea.id=t.nid
andt.id>@PageLowerBoundandt.id<=@PageUpperBoundorderbyt.id
end
GO
存储历程会依据传进的参数@docount来断定是否是要前往一切要分页的纪录总数
出格是这两行
setrowcount@PageUpperBound
insertinto@indextable(nid)selectidfromluntanwherethis_id=@this_idorderbyreply_timedesc
真的是妙趣横生!!setrowcount@PageUpperBound当纪录数到达@PageUpperBound时就会中断处置查询
,selectid只把id列掏出放光临时内外,selecta.*fromluntana,@indextabletwherea.id=t.nid
andt.id>@PageLowerBoundandt.id<=@PageUpperBoundorderbyt.id
而这句也只从表中掏出所必要的纪录,而不是一切的纪录,分离起来,极年夜的进步了效力!!
妙啊,真的妙!!!!
CREATEPROCEDUREPaging_RowCount
(
@Tablesvarchar(1000),
@PKvarchar(100),
@Sortvarchar(200)=NULL,
@PageNumberint=1,
@PageSizeint=10,
@Fieldsvarchar(1000)=*,
@Filtervarchar(1000)=NULL,
@Groupvarchar(1000)=NULL)
AS
/*DefaultSorting*/
IF@SortISNULLOR@Sort=
SET@Sort=@PK
/*Findthe@PKtype*/
DECLARE@SortTablevarchar(100)
DECLARE@SortNamevarchar(100)
DECLARE@strSortColumnvarchar(200)
DECLARE@operatorchar(2)
DECLARE@typevarchar(100)
DECLARE@precint
/*Setsortingvariables.*/
IFCHARINDEX(DESC,@Sort)>0
BEGIN
SET@strSortColumn=REPLACE(@Sort,DESC,)
SET@operator=<=
END
ELSE
BEGIN
IFCHARINDEX(ASC,@Sort)=0
SET@strSortColumn=REPLACE(@Sort,ASC,)
SET@operator=>=
END
IFCHARINDEX(.,@strSortColumn)>0
BEGIN
SET@SortTable=SUBSTRING(@strSortColumn,0,CHARINDEX(.,@strSortColumn))
SET@SortName=SUBSTRING(@strSortColumn,CHARINDEX(.,@strSortColumn)+1,LEN(@strSortColumn))
END
ELSE
BEGIN
SET@SortTable=@Tables
SET@SortName=@strSortColumn
END
SELECT@type=t.name,@prec=c.prec
FROMsysobjectso
JOINsyscolumnscono.id=c.id
JOINsystypestonc.xusertype=t.xusertype
WHEREo.name=@SortTableANDc.name=@SortName
IFCHARINDEX(char,@type)>0
SET@type=@type+(+CAST(@precASvarchar)+)
DECLARE@strPageSizevarchar(50)
DECLARE@strStartRowvarchar(50)
DECLARE@strFiltervarchar(1000)
DECLARE@strSimpleFiltervarchar(1000)
DECLARE@strGroupvarchar(1000)
/*DefaultPageNumber*/
IF@PageNumber<1
SET@PageNumber=1
/*Setpagingvariables.*/
SET@strPageSize=CAST(@PageSizeASvarchar(50))
SET@strStartRow=CAST(((@PageNumber-1)*@PageSize+1)ASvarchar(50))
/*Setfilter&groupvariables.*/
IF@FilterISNOTNULLAND@Filter!=
BEGIN
SET@strFilter=WHERE+@Filter+
SET@strSimpleFilter=AND+@Filter+
END
ELSE
BEGIN
SET@strSimpleFilter=
SET@strFilter=
END
IF@GroupISNOTNULLAND@Group!=
SET@strGroup=GROUPBY+@Group+
ELSE
SET@strGroup=
/*Executedynamicquery*/
EXEC(
DECLARE@SortColumn+@type+
SETROWCOUNT+@strStartRow+
SELECT@SortColumn=+@strSortColumn+FROM+@Tables+@strFilter++@strGroup+ORDERBY+@Sort+
SETROWCOUNT+@strPageSize+
SELECT+@Fields+FROM+@Tables+WHERE+@strSortColumn+@operator+@SortColumn+@strSimpleFilter++@strGroup+ORDERBY+@Sort+
)
GO
平台即服务PaaS、基础设施即服务IaaS、软件即服务SaaS都是我们比较熟悉的MySQL学习教程,现在又出现了数据库即服务DBaaS,以基于云的方式存储结构化数据。 XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) 同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。 大家注意一点。如下面的例子: 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情 比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
页:
[1]