Php 如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝
Php 如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝,php,mysql,sql,Php,Mysql,Sql,如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝试第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助! $limit = 10000; $annee = '2017'; //Co
如果我能找到足够的时间,今天是第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!谢谢你花时间思考和回答。如果我能找到足够的时间,我今天一定会尝试第一个解决方案@Vladatr谈到了在性能方面的问题,所以我提出了我的问题,没有它。现在,删除将在约0.07秒内运行。我会试试看你的查询是否更快。再次感谢你的帮助!
$limit = 10000;
$annee = '2017';
//Counting the lines I need to delete
$sql = " SELECT COUNT(*) FROM historisation.cdr_".$annee." a
INNER JOIN transatel.cdr_transatel_v2 b ON a.id_cdr = b.id_cdr ";
$t = $db_transatel->selectAll($sql);
//The number of lines I have to delete
$i = $t[0][0];
do {
if ($i < $limit) {
$limit = $i;
}
//The problem is comming from that delete
$selectFromHistoryAndDelete = " DELETE FROM transatel.cdr_transatel_v2
WHERE id_cdr IN (
SELECT a.id_cdr FROM historisation.cdr_".$annee." a
INNER JOIN (SELECT id_cdr FROM historisation.cdr_transatel_v2) b ON a.id_cdr = b.id_cdr
)
LIMIT " . $limit;
$delete = $db_transatel->exec($selectFromHistoryAndDelete, $params);
$i = $i - $limit;
} while ($i > 0);
DELETE FROM IN(1,2,3,...10000)
DELETE FROM IN(1,2,3,...20000)
...
DELETE FROM IN(1,2,3,...1000000)
$sql = " SELECT COUNT(a.cdr_id) FROM historisation.cdr_".$annee." a
INNER JOIN transatel.cdr_transatel_v2 b ON a.id_cdr = b.id_cdr ";
$t = $db_transatel->selectAll($sql);
//The number of lines I have to delete
$i = $t[0][0];
//set starting index
$previous = 0;
do {
if ($i < $limit) {
$limit = $i;
}
$selectFromHistoryAndDelete = 'DELETE d
FROM transatel.cdr_transatel_v2 AS d
JOIN (
SELECT @previous := cdr_id AS cdr_id
FROM historisation.cdr_2017
WHERE cdr_id > ' . $previous . '
ORDER BY cdr_id
LIMIT 10000
) AS a
ON a.cdr_id = d.cdr_id';
$db_transatel->exec($selectFromHistoryAndDelete, $params);
//retrieve last id selected in cdr_2017 to use in next iteration
$v = $db_transatel->selectAll('SELECT @previous'); //prefer fetchColumn
$previous = $v[0][0];
$i = $i - $limit;
} while ($i > 0);
//optionally reclaim table-space
$db_transatel->exec('OPTIMIZE TABLE transatel.cdr_transatel_v2', $params);
#ensure the storage table doesn't exist already
DROP TABLE IF EXISTS cdr_transatel_temp;
#duplicate the structure of the original table
CREATE TABLE transatel.cdr_transatel_temp
LIKE transatel.cdr_transatel_v2;
#copy the records that are not to be deleted from the original table
INSERT transatel.cdr_transatel_temp
SELECT *
FROM transatel.cdr_transatel_v2 AS d
LEFT JOIN historisation.cdr_2017 AS b
ON b.cdr_id = d.cdr_id
WHERE b.cdr_id IS NULL;
#replace the original table with the storage table
RENAME TABLE transatel.cdr_transatel_v2 to transatel.backup,
transatel.cdr_transatel_temp to cdr_transatel_v2;
#remove the original table
DROP TABLE transatel.backup;