一个是mySQL的;解释;专家

一个是mySQL的;解释;专家,mysql,query-optimization,Mysql,Query Optimization,下面是一个关于3个不同查询的解释,它们给出了相同的结果。 对我来说,第三个问题看起来最好。但我不确定“依赖子查询”。 所以我的问题是哪一个是真正最好的查询? 是否有任何其他变化会产生相同的结果,甚至更好。 据一个叫@草莓的人说,有,但@草莓还没有贴出来 在阅读了@BillKarwin的答案后,我这样做是为了看看哪个查询实际上更快(使用该样本数据集)。作为第四种解决方案,这实际上是非常常用的: 引入另一个conversation实体来保存会话元数据,如:第一条消息引用、最后一条消息引用等 这样,您

下面是一个关于3个不同查询的解释,它们给出了相同的结果。
对我来说,第三个问题看起来最好。但我不确定“依赖子查询”。 所以我的问题是哪一个是真正最好的查询?
是否有任何其他变化会产生相同的结果,甚至更好。
据一个叫@草莓的人说,有,但@草莓还没有贴出来


在阅读了@BillKarwin的答案后,我这样做是为了看看哪个查询实际上更快(使用该样本数据集)。

作为第四种解决方案,这实际上是非常常用的:

引入另一个
conversation
实体来保存会话元数据,如:第一条消息引用、最后一条消息引用等


这样,您就可以在不进行任何恶意连接或分组的情况下获取数据了。请记住,EXPLAIN不一定是最快查询的最佳指示器。这只是对优化器最佳猜测的估计

最好的查询也可能不同,这取决于表中有多少数据,以及由于查询在并发线程中运行,系统上有多少内存竞争


因此,您应该实际运行这些查询,而不仅仅是查看解释。使用或MySQL 5.6或。单独或在负载下测量性能,以获得性能的完整图片。还有一个新功能,但可能会有所更改。

只需创建另一个
对话
表,并保留对上一条消息的引用即可。这是最好的解决方案。@zerkms的想法很好,我从来没有想过。+1,我现在还不想接受你的答案,因为我不知道是否还有其他想法,我想听到所有的想法。顺便问一下,第三个问题真的比第一个好吗?你肯定知道吗?@Tin Tran:我觉得3比1好。很酷,你是说这样的事吗?根据该示例数据集,我认为最差的查询实际上是最快的查询。是的,但是当表中的行太少时,请小心不要过度推断最佳查询。随着数据的增长,通常会得到完全不同的结果。我怀疑随着数据的增长,查询速度会变慢,但我永远也不知道,尽管如此,分析还是很好的,谢谢。