从大表MySql 5.5.46中删除多行

从大表MySql 5.5.46中删除多行,mysql,stored-procedures,sql-delete,Mysql,Stored Procedures,Sql Delete,下面的语句删除重复的行并保留最高的id DELETE t1 FROM contacts t1 INNER JOIN contacts t2 WHERE t1.id < t2.id AND t1.email = t2.email; 从联系人t1中删除t1 内部连接触点t2 哪里 t1.id

下面的语句删除重复的行并保留最高的id

DELETE t1 FROM contacts t1
INNER JOIN contacts t2 
WHERE 
    t1.id < t2.id AND 
    t1.email = t2.email;
从联系人t1中删除t1
内部连接触点t2
哪里
t1.id
此查询两次引用contacts表,因此使用表别名t1和t2

但我有一张600万行的桌子,我们需要清理一下

我的第一种方法是使用以下行创建SP

REPEAT
DELETE t1 FROM contacts t1
INNER JOIN contacts t2 
WHERE 
    t1.id < t2.id AND 
    t1.email = t2.email
ORDER BY t1.id ASC LIMIT 10000;
UNTIL ROW_COUNT() = 0 END REPEAT;
重复
从联系人t1中删除t1
内部连接触点t2
哪里
t1.id
错误是

1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第17行的“t1.id ASC限制10000订单”时间:0063s


请帮我做。

您不能在删除中的联接的表中使用
顺序
限制

多表语法

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

请参见删除没有顺序,您不能使用限制,您尝试实现的具体目标是什么。正在运行,仅限chelc 10000rows@nbk请查看此删除顺序。您还应该阅读多表语法部分