我有一個約420萬行的感興趣的特定表中的MySQL數據庫。數據主要由id,緯度,經度以及其他一些元數據組成。在mysql中刪除行會減少CPU使用率嗎?
由於實際上只有非常小的百分比(最新的)數據是相關的;大部分數據只是爲了記錄。它的容量高達1.7GB,最近我一直在看CPU的使用率高達400%。
不言而喻,清理未使用的數據是一個好主意,但如果它不應該影響性能,那麼暫時我寧願保留它並調查更緊迫的問題(像這樣一)。
我通過MySQL high CPU usage [closed]閱讀了一些很好的建議,但是在我們的生產數據庫上測試太多之前。我很好奇,如果是這樣,在我看來,一些明顯的解決方案確實是一個答案。
我記得讀到InnoDB刪除行不一定會提高性能,但無法找到位置。也許有人可以證實這是否屬實。
這裏是SHOW CREATE TABLE item
:
CREATE TABLE `item` (
`encounter_id` varchar(50) NOT NULL,
`spawnpoint_id` varchar(255) NOT NULL,
`item_id` int(11) NOT NULL,
`latitude` double NOT NULL,
`longitude` double NOT NULL,
`disappear_time` datetime NOT NULL,
PRIMARY KEY (`encounter_id`),
KEY `item_spawnpoint_id` (`spawnpoint_id`),
KEY `item_item_id` (`item_id`),
KEY `item_disappear_time` (`disappear_time`),
KEY `item_latitude_longitude` (`latitude`,`longitude`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
查詢我可能會遇到將是一個例子:
SELECT * FROM item WHERE latitude > 38 AND latitude < 37
我看不到如何刪除行將不會提高全表掃描的性能,但如果大部分與表的交互都是通過索引進行的,則刪除行可能會產生較小的影響。 –
InnoDB只是隱藏行。 – sectus
我將如何知道是否屬於這種情況?如果這一點非常重要,我的查詢將以緯度,經度和時間(最近15分鐘內)爲依據。我從來沒有用索引配置過任何東西,但在閱讀了一段後,聽起來像mysql正在索引整個表。 – klvs