2

我有一个具有以下结构的表:

ID, SourceID, EventId, Starttime, Stoptime

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

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

另一方面,我有需要从这个表中读取的 GUI,它在这里变得很慢。如果我想选择所有已完成的事件,where SourceID = something则需要将近 300 秒。SourceID 有一个索引。我采用相同的查询并首先输入解释关键字,我得到了这个。

select type = simple
type = ref
possible_keys = sourceidnevent,sourceid
key = soruceid
key_len = 109
ref = const
rows = 84148

和查询

SELECT * FROM tabel where sourceid='28B791C7-D519-4F0C-BC03-EFB1D4AC9CEB'

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

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

但是,如果我为选择添加限制,它会更快。那么瓶颈是传输的数据量而不是实际的查找/选择部分吗?如果是这样,我可以重建我的应用程序以仅在一天内进行计算并将结果保存到另一个表中,然后汇总所有数据。

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

4

1 回答 1

0

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

NoSQL 在单个节点上不太可能比 MySQL 快得多。如果它比在 MySQL 上使用处理程序 API和适当的索引更快,我会感到非常惊讶。

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

行 = 84148

它真的需要处理那么多行来提供您需要的结果吗?如果是这样并且结果没有聚合,那么也许您需要考虑为什么需要将 80k 行数据发送到前端。如果它只需要返回一些非聚合行,那么你真的需要分析你的索引。

我为所有组合添加了索引

太多的索引对性能的影响与太少一样。

于 2012-09-05T08:23:30.863 回答