【发布时间】:2016-04-08 13:14:06
【问题描述】:
我想从 MySQL 数据库中的表中获取两行。这两行必须是我订购后的第一行和最后一行。为了实现这一点,我做了两个查询,这两个:
SELECT dateBegin, dateTimeBegin FROM worktime ORDER BY dateTimeBegin ASC LIMIT 1;";
SELECT dateBegin, dateTimeBegin FROM worktime ORDER BY dateTimeBegin DESC LIMIT 1;";
我决定不获取整个集合,而是在 PHP 中选择第一个和最后一个,以避免可能非常大的数组。我的问题是,我有两个查询,我真的不知道这有多有效。例如,我想将它们与 UNION 结合起来,但是我仍然需要对未排序的列表进行两次排序,这也是我想避免的,因为第二次排序与第一次排序完全相同
我想订购一次,然后选择这个有序列表的第一个和最后一个值,但我不知道比两个查询更有效的方法。我知道性能收益不会很大,但是我知道列表正在增长,并且随着它们变得越来越大,我为一些表执行这部分,我需要最有效的方法来做到这一点。 我发现了几个类似的主题,但没有一个涉及这个特定的性能问题。
非常感谢任何帮助。
【问题讨论】:
-
为什么不像
select datebegin, max(datetimebegin), min(datetimebegin) ...这样的? -
我读过类似的东西,但无法弄清楚它的工作原理。为什么我不选择这些是因为我不确定它们是否排序两次?
-
根本没有排序。你会得到最大/最小的 datetimebegins 值,以及第一个计数的 datebegin。
-
好吧,现在我觉得自己很愚蠢。万分感谢。我在排序问题上是如此固定,以至于我也将其误解为一个问题。如果您愿意,可以将您的第一条评论作为答案,我会接受。非常感谢,有时只是需要另一个头脑:)
-
@JRsz 如果 dateBegin 的值不重要,则没有问题。
标签: php mysql sql performance processing-efficiency