2016-09-16 35 views
0

我有一個約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

+0

我看不到如何刪除行將不會提高全表掃描的性能,但如果大部分與表的交互都是通過索引進行的,則刪除行可能會產生較小的影響。 –

+0

InnoDB只是隱藏行。 – sectus

+0

我將如何知道是否屬於這種情況?如果這一點非常重要,我的查詢將以緯度,經度和時間(最近15分鐘內)爲依據。我從來沒有用索引配置過任何東西,但在閱讀了一段後,聽起來像mysql正在索引整個表。 – klvs

回答

0

有一對夫婦的事情可以做,以提高性能。刪除一堆行不一定會加快你的整體mysql性能(無論如何都不明顯)。有些東西你可以嘗試是:

  1. 除去未使用的索引
  2. 你可以到你的虛擬機(地方MySQL服務器託管)
  3. 使用SSD的替代HDD
添加更多的內存

我建議你在下列網站讀了,它有很多技巧的,這將幫助你:

http://www.tocker.ca/2013/10/24/improving-the-performance-of-large-tables-in-mysql.html

+1

在要求OP進行投資之前,或許我們應該確定開發者能否改進性能。 – Shadow

+0

這是OP可以考慮使用的解決方案之一,如果你閱讀鏈接(如果你做或不做),還有其他多種解決方案。我不認爲我應該得到一票@陰影 – James111