gpt4 book ai didi

php - 优化慢速 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 04:03:28 25 4
gpt4 key购买 nike

我在更改 SQL 查询以更快地执行时遇到问题。我需要检索特定时间间隔的第一行和最后一行。例如,我正在寻找数据库中某个特定时间间隔(1 小时、24 小时)的第一个和最后一个日期。我有这个有效的 sql 语句,我正在使用 php 执行它:

$query = "
SELECT Date, RainABS
FROM ws3600
WHERE Date IN (
(
SELECT MIN(Date)
FROM ws3600
WHERE Date >= '" . $timeInterval1 . "'
AND Date <= '" . $timeInterval2 . "'
),
(
SELECT MAX(Date)
FROM ws3600
WHERE Date >= '" . $timeInterval1 . "'
AND Date <= '" . $timeInterval2 . "'
)
)
";

从查询中可以看出,表名是ws3600,我检索的参数是Date和RainABS。我正在使用 IN 运算符和两个内部选择语句。

问题是,当执行它时:

$result = mysql_query($query);

需要很长时间。我用这段代码测量了它:

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;

$result = mysql_query($query);

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);

平均耗时 0.28 秒。问题是我必须执行 24 个这样的语句,平均累积到 6,72s。我知道我应该去掉内部选择语句,但我不知道如何才能得到第一行和最后一行?

最佳答案

要摆脱使用 MIN 或 MAX 的内部选择,答案通常是 ORDER BY 和 LIMIT。

像这样:

SELECT Date, RainABS
FROM ws3600
WHERE Date >= '" . $timeInterval1 . "'
AND Date <= '" . $timeInterval2 . "
ORDER BY Date ASC
LIMIT 1

UNION

SELECT Date, RainABS
FROM ws3600
WHERE Date >= '" . $timeInterval1 . "'
AND Date <= '" . $timeInterval2 . "
ORDER BY Date DESC
LIMIT 1;

关于php - 优化慢速 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6634239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com