我有一个包含数百万条记录(14,000,000)的简单表,对于一个简单的查询,它花费了太多时间“发送数据”。
桌子
CREATE TABLE IF NOT EXISTS details (
id int(11) NOT NULL,
date date NOT NULL,
time int(2) NOT NULL,
minutes_online decimal(5,0) NOT NULL,
minutes_playing decimal(5,0) NOT NULL,
minutes_chatting decimal(5,0) NOT NULL,
minutes_away decimal(5,0) NOT NULL
PRIMARY KEY (id,date,time)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Run Code Online (Sandbox Code Playgroud)
简单的查询
mysql> SELECT * FROM details WHERE id = 3014595;
Run Code Online (Sandbox Code Playgroud)
解释
mysql> EXPLAIN SELECT * FROM details WHERE id = 3014595;
+----+-------------+-----------+------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | …
Run Code Online (Sandbox Code Playgroud) 我有一个现在有 1200 万条记录的 mysql 表,我正在尝试使用以下 UPDATE 代码更新列(排名):
SET @r=0;
UPDATE records SET rank= @r:= (@r+1) where type = 2 ORDER BY seconds DESC;
Run Code Online (Sandbox Code Playgroud)
几乎每分钟都会插入新行。所以,一小时后,我有几行没有排名,我需要再次更新整个表格。
然而,这需要太多时间。有什么优化方法或不同的方法来更快地更新表吗?也许是一种不同的方法?分区表?