我一直在运行一个网站,在这个过程中有大量的数据。
用户将诸如ip、id、日期等数据保存到服务器,并将其存储在MySQL数据库中。每个条目都存储为表中的一行。
现在,表中大约有2400万行。
问题1:
现在一切都变慢了,因为一个完整的表格扫描可能要花费太多的时间,但我已经将表编入索引了。
问题2:
如果用户从表中提取select数据,它可能会阻止所有其他用户(因为表被锁定)访问站点,直到查询完成为止。
我们的服务器

EXPLAIN SELECT SUM(impresn), SUM(rae), SUM(reve), `date` FROM `publisher_ads_hits` WHERE date between '2015-05-01' AND '2016-04-02' AND userid='168' GROUP BY date ORDER BY date DESC发布于 2016-04-02 13:35:26
根据解释,查询不使用索引。尝试添加复合索引(用户to,日期)。
如果有许多更新和删除操作,请尝试将引擎更改为INNODB。
发布于 2016-04-02 10:47:41
如果您向MyIsam表写入,则所有选择都被阻止。只有一个表锁。如果使用InnoDB,则有一个只锁定它们需要的行的行锁。给我们解释一下你的问题。因此,有可能您必须创建一些新的。MySQL只能处理每个查询的一个索引。因此,如果在Where条件中使用更多字段,则在此字段上设置一个复合索引是有用的。
发布于 2016-04-02 13:56:14
基本问题是全表扫描。一些建议是:
https://stackoverflow.com/questions/36372018
复制相似问题