首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

MySQL瓶颈
EN

Stack Overflow用户
提问于 2012-09-05 06:39:01
回答 1查看 478关注 0票数 2

我有一张桌子,其结构如下:

代码语言:javascript
运行
复制
ID, SourceID, EventId, Starttime, Stoptime

所有ID列都是char(36),时间是日期。

问题是查询表的速度真的很慢。我有七百万行,我有大约60-70个线程一直在写(插入或更新)到表。

另一方面,我有需要从这个表读取的GUI,它就在这里,它变得很慢。如果我想选择所有的事件已经成为where SourceID = something,它需要近300秒。SourceID有一个索引。我使用相同的查询,并将explain关键字放在第一个,我得到了这个。

代码语言:javascript
运行
复制
select type = simple
type = ref
possible_keys = sourceidnevent,sourceid
key = soruceid
key_len = 109
ref = const
rows = 84148

和查询

代码语言:javascript
运行
复制
SELECT * FROM tabel where sourceid='28B791C7-D519-4F0C-BC03-EFB1D4AC9CEB'

然而,我开始思考我真正需要从桌子上得到什么。我想知道哪个事件发生在哪个服务器上,以及哪个事件发生在服务器上,按日期排序。我为所有使用where和order的组合添加了索引。

我需要所有的行,因为我想对它们做一些计算,一些分组,平均等等。但我是在.NET环境下做的,而不是问很多问题。

但是,如果我对select添加了一个限制,它就会运行得更快。那么瓶颈是数据的传输量,而不是实际的查找/选择部分吗?如果是这样的话,我可以重新构建我的应用程序,只在一天内完成计算,并将结果保存到另一个表中,然后将所有结果聚合起来。

我怎样才能加快进度?切换到MongoDB会更好吗?我目前使用MySQL和InnoDB。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-05 08:23:30

这里有很多你没有提供的信息--我在其他地方的评论中提到了其中的一些。

在单个节点上,NoSQL不太可能比MySQL快得多。如果它比在MySQL上使用MySQL和批准索引的速度更快,我会感到非常惊讶。

您已经提供了解释计划的一部分(但没有解释查询),但您没有提供任何解释:

行= 84148

它真的需要处理那么多行来提供所需的结果吗?如果是这样,并且结果不是聚合的,那么您可能需要考虑为什么需要将80k行数据发送到前端。如果它只需要返回几个非聚合行,那么您确实需要分析您的索引。

我增加了所有组合的索引

太多的索引和太少的索引一样不利于性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12275765

复制
相关文章

相似问题

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