我一直在运营一个网站,其中包含大量数据。
用户将数据(如ip,id,date)保存到服务器,并将其存储在MySQL数据库中。每个条目都作为一行存储在表格中。
现在表格中有大约2400万行
问题1:
现在情况变得缓慢,因为全表扫描可能需要太多分钟,但我已将索引编入索引。
问题2:
如果用户从表中提取选择数据,则可能会阻止所有其他用户(因为表已被锁定)访问该网站,直到查询完成。
我们的服务器
EXPLAIN SELECT SUM(impresn),SUM(rae),SUM(reve),date
FROM publisher_ads_hits
' 2015-05-01'之间的日期AND' 2016-04-02' AND userid =' 168' GROUP BY日期ORDER BY日期DESC
答案 0 :(得分:2)
锁定来自@Max P的评论。如果您写入MyIsam表,则会阻止所有SELECT。只有一个表锁。如果您使用InnoDB,则只有一个ROW Lock锁定他们需要的ROW。 Aslo向我们展示了你的查询的EXPLAIN。所以你可能必须创建一个新的。 MySQL每个查询只能处理一个索引。因此,如果您在Where条件中使用更多字段,则在此字段上包含COMPOSITE INDEX非常有用
答案 1 :(得分:1)
根据解释,查询不使用索引。尝试添加复合索引(userid,date) 如果您有许多更新和删除操作,请尝试将引擎更改为INNODB。
答案 2 :(得分:0)
基本问题是全表扫描。一些建议是: