Mysql
Mysql 8 - Count(*) - 性能問題
我有這張有 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>)
. 這樣做更可取:確保唯一性,消除對一個索引的需求,並擺脫無用的列。