慢MySQL表

时间:2017-04-23 22:38:35

标签: mysql

我目前正在试图弄清楚为什么我正在使用的网站(Laravel 4.2框架)有时很慢,我认为这与我的数据库设置有关。我根本不是职业选手所以我会认为问题出在哪里

我的sessions表中有大约220万条记录,当我运行show processlist;时,所有占用时间最长的查询都与该表有关。

以下是一张图片:

enter image description here

表格结构

enter image description here

当然,我做错了什么,或者索引没有正确?我不确定,数据库不是很棒。

1 个答案:

答案 0 :(得分:1)

我们没有看到正在执行的完整SQL,因此我们无法推荐适当的索引。但是,如果DELETE语句的唯一谓词在last_activity列上,即

DELETE FROM `sessions` WHERE last_activity <= 'somevalue' ; 

然后,通过添加前导列为somevalue的索引,可能会改善DELETE语句的性能,例如

CREATE INDEX sessions_IX1 ON sessions (last_activity);

此外,如果此表使用MyISAM存储引擎,则DML语句不能并发执行; DML语句将在等待获取表上的独占锁时阻塞。 InnoDB存储引擎使用行级锁定,因此一些DML操作可以是并发的。 (InnoDB不会消除锁争用,但锁会在行和索引块上,而不是在整个表上。)

还考虑使用不同的存储机制(MySQL数据库除外)来存储和检索Web服务器&#34;会话&#34;的信息。

此外,是否有必要(有一些要求)坚持220万&#34;会议&#34;行?我们确定所有这些行都是真正需要的吗?如果某些数据是历史数据,并且并非特别需要支持当前的Web服务器会话,我们可能会考虑将历史数据移动到另一个表中。