在MySQL中清理umbraco历史

时间:2015-02-03 12:54:36

标签: mysql umbraco

将umbraco从7.1版更新到7.2后,我开始在获取数据方面遇到问题。 我注意到我无法获得InternalIndexer检查索引来完成重建,我认为这将解决我的问题。 我读到有一个大数据库可能会导致这个问题所以我正在尝试清理我的历史数据数据库。 我找到了一个执行此操作的脚本,但它是为SQL Server编写的,我将此问题转换为MySQL。

任何人都可以帮我转换这个脚本,或者可以使用另一个我可以使用的脚本吗? SQL Server脚本是:

CREATE PROCEDURE [dbo].[DeleteHistory]

AS

BEGIN

Select VersionID into #tmp FROM cmsDocument

WHERE versionID NOT IN  (SELECT D.versionId FROM cmsDocument D 

WHERE D.versionId IN (SELECT versionId FROM (SELECT CV.versionId, published, newest, RANK() OVER(ORDER BY CV.versionDate DESC) RowNum
FROM cmsContentVersion CV JOIN cmsDocument DD ON CV.versionId = DD.versionId
WHERE DD.nodeId = D.nodeId) AS tmp
WHERE tmp.RowNum <= 3 OR tmp.published = 1 OR tmp.newest = 1)  )

DELETE FROM cmsPreviewXml WHERE VersionId IN (select #tmp.VersionId from #tmp)

DELETE FROM cmsContentVersion WHERE VersionId IN (select #tmp.VersionId from #tmp)

DELETE FROM cmsPropertyData WHERE VersionId IN (select #tmp.VersionId from #tmp)

DELETE FROM cmsDocument WHERE VersionId IN (select #tmp.VersionId from #tmp)

END

到目前为止我所拥有的是:

CREATE TEMPORARY TABLE tmp

Select      VersionID FROM      cmsDocument  WHERE versionID NOT IN (   SELECT          D.versionId, D.NodeId   FROM        cmsDocument D   WHERE       D.versionId IN (            SELECT 
                versionId           FROM (
                SELECT 
                    CV.versionId, published, newest, @curRank := @curRank + 1 AS RowNum  
                FROM 
                    cmsContentVersion CV
                        JOIN cmsDocument DD ON CV.versionId = DD.versionId
                    , (SELECT @curRank := 0) r
                WHERE 
                    DD.nodeId = D.NodeId
                ORDER BY
                    CV.versionDate DESC
                ) AS tmp                WHERE
                tmp.RowNum <= 3 OR tmp.published = 1 OR tmp.newest = 1
        ) )

DELETE FROM cmsPreviewXml WHERE VersionId IN (select VersionId from tmp)

DELETE FROM cmsContentVersion WHERE VersionId IN (select VersionId from tmp)

DELETE FROM cmsPropertyData WHERE VersionId IN (select VersionId from tmp)

DELETE FROM cmsDocument WHERE VersionId IN (select VersionId from tmp)

DROP TEMPORARY TABLE tmp

希望你们能帮帮我。

由于

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我这样解决了:

SET GLOBAL connect_timeout=28800;
SET GLOBAL wait_timeout=28800;
SET GLOBAL interactive_timeout=28800;
DROP TEMPORARY TABLE IF EXISTS tmp;
CREATE TEMPORARY TABLE tmp (
    Select versionId from (
        Select * From (
            SELECT CV.versionID , @curRank := @curRank + 1 AS RowNum
            FROM cmsContentVersion CV
            JOIN cmsDocument DD ON CV.versionId = DD.versionId, (SELECT @curRank := 0) r
            WHERE (Newest=0 and published=0) 
            ORDER BY DD.nodeId, CV.VersionDate DESC
            ) Old
        Where RowNum > 3
    ) Old2
);
SELECT Count(*) from tmp;
DELETE FROM cmsPreviewXml WHERE VersionId IN (select VersionId from tmp);
DELETE FROM cmsContentVersion WHERE VersionId IN (select VersionId from tmp);
DELETE FROM cmsPropertyData WHERE cmsPropertyData.VersionId IN (select VersionId from tmp);
DELETE FROM cmsDocument WHERE VersionId IN (select VersionId from tmp);
DELETE FROM umbracolog WHERE LOGHEADER='Error'

侨,    米歇尔