首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有数百万行的MySQL锁定表

问具有数百万行的MySQL锁定表
EN

Stack Overflow用户
提问于 2016-04-02 10:22:24
回答 3查看 281关注 0票数 1

我一直在运行一个网站,在这个过程中有大量的数据。

用户将诸如ip、id、日期等数据保存到服务器,并将其存储在MySQL数据库中。每个条目都存储为表中的一行。

现在,表中大约有2400万行。

问题1:

现在一切都变慢了,因为一个完整的表格扫描可能要花费太多的时间,但我已经将表编入索引了。

问题2:

如果用户从表中提取select数据,它可能会阻止所有其他用户(因为表被锁定)访问站点,直到查询完成为止。

我们的服务器

  • 32 Gb Ram
  • 具有24线程cpu的12核
  • 表使用MyISAM引擎

​

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-02 13:35:26

根据解释,查询不使用索引。尝试添加复合索引(用户to,日期)。

如果有许多更新和删除操作,请尝试将引擎更改为INNODB。

票数 1
EN

Stack Overflow用户

发布于 2016-04-02 10:47:41

如果您向MyIsam表写入,则所有选择都被阻止。只有一个表锁。如果使用InnoDB,则有一个只锁定它们需要的行的行锁。给我们解释一下你的问题。因此,有可能您必须创建一些新的。MySQL只能处理每个查询的一个索引。因此,如果在Where条件中使用更多字段,则在此字段上设置一个复合索引是有用的。

票数 2
EN

Stack Overflow用户

发布于 2016-04-02 13:56:14

基本问题是全表扫描。一些建议是:

  • 根据日期划分表,并在活动系统中保存不超过6-12个月的数据。
  • 在user_id上添加索引
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36372018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档