作者roga (凝视)
看板Database
标题[SQL ] 大量删除资料的问题
时间Tue Jun 9 01:20:55 2009
环境介绍:使用 DB 是 MySQL
资料表结构:
url_detail_history 资料表
+--------------+---------------------+------+
| Field | Type | Null |
+--------------+---------------------+------+
| id | bigint(11) unsigned | NO | -> 有 Auto_increment
| url_id | int(11) | NO |
| visitor_ip | varchar(15) | NO |
| visitor_fqdn | varchar(100) | NO |
| visitor_time | timestamp | NO | -> CURRENT_TIMESTAMP
+--------------+---------------------+------+
现在里面有许多笔资料,
SELECT COUNT(id), url_id from url_detail_history GROUP BY url_id
这句语法可以得知每个 url_id 有几笔资料。
因为前几天程式上的疏忽,小弟写错了一些地方,
以至於资料表非常庞大,我想请问板上前辈们,
有没有办法直接用 SQL 语法执行,每个 url_id 只要总数
超过 N 笔资料就删除到只剩下 N 笔为止,
当然, id 越大代表资料越新,必须能从小的 id 开始删起。
我有写一段程式来跑但是效能不彰,
loading 飙到 100 多,拉牛上树惨不忍睹..
foreach(
$url_id ) {
do {
$ID = SELECT min(id) FROM table WHERE url_id =
$url_id
$COUNT = (再从资料表算 url_id 有几笔)
DELETE FROM table where id =
$ID
} while(
$COUNT < 1501)
}
这样作法效能很差,不想这麽暴力解这个问题,
想请教前辈不知道有没有比较好的办法...谢谢
--
凝视着,却看不见光景。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.223.207
※ 编辑: roga 来自: 220.130.223.207 (06/09 01:23)