我有一個包含大約850萬行的MySQL Innodb表。表結構基本上是這樣的:使用MySQL分區來加速併發刪除並選擇?
CREATE TABLE `mydatatable` (
`ext_data_id` int(10) unsigned NOT NULL,
`datetime_utc` date NOT NULL DEFAULT '0000-00-00',
`type` varchar(8) NOT NULL DEFAULT '',
`value` decimal(6,2) DEFAULT NULL,
PRIMARY KEY (`ext_data_id`,`datetime_utc`,`type`),
KEY `datetime_utc` (`datetime_utc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
每天晚上,我從這個表下面的查詢刪除過期值:
delete from mydatatable where datetime_utc < '2013-09-23'
該查詢似乎沒有使用indizes,這需要相當一段時間才能運行。不過,我也獲得併發更新並在同一張表上進行選擇。這些被鎖定,導致我的網站在當時沒有響應。
我正在尋找各種方法來加快此設置。我推測MySQL分區,我想知道這是否合適。我總是添加並選擇較新的數據到這個表中並刪除舊的數據。我可以根據類似MOD(DAYOFYEAR(datetime),4)創建分區。現在,當我刪除時,我總是會刪除另一個分區中的值,而不是正在讀取或寫入的分區。
我會使用此設置鎖定嗎?在我的情況下,分區會提高查詢速度和可用性嗎?或者我應該尋找另一個解決方案,如果是的話,哪一個?