我有一个具有以下结构的表:
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'
然而,我开始思考我真正需要的是什么。我想知道哪个事件发生在哪个服务器上,以及哪个事件发生在服务器上,按日期排序。我为使用where和order by的所有组合添加了索引。
我需要所有的行,因为我想对它们进行一些计算,一些分组,平均等等。但我是在 .NET 环境中做的,而不是问很多问题。
但是,如果我为选择添加限制,它会更快。那么瓶颈是传输的数据量而不是实际的查找/选择部分吗?如果是这样,我可以重建我的应用程序以仅在一天内进行计算并将结果保存到另一个表中,然后汇总所有数据。
我怎样才能加快进程?切换到MongoDB会更好吗?我目前使用 MySQL 和 InnoDB。