这是一个 sqlFiddle ,在3个不同的查询中有3个EXPLAIN,可以得到相同的结果。
对我来说,第三个查询看起来最好。但我不确定“相关的子信息”。
所以我的问题是哪一个真的是最好的查询?
是否有任何其他变化可以提供更好的结果。
据一位名叫@Strawberry的人说,但@Strawberry还没有发布它。
在阅读@ BillKarwin的回答后,我做了 sqlFiddle ,看看哪个查询实际上更快(使用该样本数据集)。
答案 0 :(得分:1)
作为第四种解决方案,实际上经常使用:
引入另一个conversation
实体,该实体将保存会话元数据,如:第一个消息引用,最后一个消息引用等
这样你就可以在没有任何讨厌的连接或分组的情况下获取数据
答案 1 :(得分:1)
请记住,EXPLAIN不一定是最快查询的最佳指标。它只是优化器最佳猜测的估计值。
根据您在表中的数据量,以及由于在并发线程中运行查询而导致系统内存竞争激烈,最佳查询也可能不同。
所以你应该实际运行这些查询,不要只看EXPLAIN。使用query profiler或MySQL 5.6 PERFORMANCE_SCHEMA或SHOW SESSION STATUS。单独测量性能和负载下的性能,以获得性能的完整图像。还有一个新的optimizer trace功能,但这可能会有所变化。