Mysql

Mysql 8 - Count(*) - 性能問題

  • July 29, 2020

我有這張有 200 萬條記錄的表

CREATE TABLE `my_table` (
 `ID` int(11) NOT NULL AUTO_INCREMENT,
 `ID_USER` int(11) DEFAULT NULL,
 `BODY` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
 `CREATION_DATE` date DEFAULT NULL,
 PRIMARY KEY (`ID`),
 KEY `ID_USER` (`ID_USER`),
 KEY `CREATION_DATE` (`CREATION_DATE`)
) ENGINE=InnoDB AUTO_INCREMENT=2198623 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

此選擇的第一次執行在 70 秒內返回“1131”

select count(*) from my_table where ID_USER=123 and CREATION_DATE>=2019-07-29

第二次執行在 60 毫秒內返回“1131”。

你有什麼建議來提高性能?

更多資訊:

  • ID 作為基數 2198623
  • ID_USER 作為基數 12788
  • CREATION_DATE 作為基數 11909

“管道膠帶”選項:刪除索引ID_User並用索引替換它(ID_User,CREATION_DATE)

最佳選擇:擺脫Id並找到另一個合適的主鍵,例如(ID_User,<timestamp>). 這樣做更可取:確保唯一性,消除對一個索引的需求,並擺脫無用的列。

引用自:https://dba.stackexchange.com/questions/271877