[SQL ] 大量刪除資料的問題

看板Database作者 (凝視)時間16年前 (2009/06/09 01:20), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/5 (看更多)
環境介紹:使用 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)
文章代碼(AID): #1ABKXvvB (Database)
討論串 (同標題文章)
文章代碼(AID): #1ABKXvvB (Database)