【发布时间】:2018-04-19 22:52:43
【问题描述】:
在这个Table我使用这个脚本:
$SQL = "
SELECT id, col
FROM t
ORDER BY CASE WHEN 'A B C D E' LIKE CONCAT(col, '%') THEN col END DESC;
";
$stmt = $connect->prepare($SQL);
$stmt->execute();
if ($stmt->rowCount > 0) {
. . PULL_DATA . .
} else {
echo 'No Data Pulled';
}
我使用ORDER BY是因为我想先提取重要数据,这与 col = A B C D E THEN A B C D THEN A B C THEN A B THEN A 相关
BUT 如果这些col = 值都不存在,则提取与这组字符串无关的数据,因此如果id 为1, 2, 7, 5 的col 我仍然可以获取其他记录使用,现在这个查询似乎根本无法优化,所以我想到了以下脚本,它在Query 上使用WHERE 而不是ORDER BY:
$SQL = "
SELECT id, col
FROM t
WHERE 'A B C D E' LIKE CONCAT(col, '%')
ORDER BY col DESC;
";
$stmt = $connect->prepare($SQL);
$stmt->execute();
if ($stmt->rowCount > 0) {
. . PULL_DATA . .
} else {
$SQL = "
SELECT id, col
FROM t
ORDER BY col DESC;
";
$stmt = $connect->prepare($SQL);
$stmt->execute();
if ($stmt->rowCount > 0) {
. . PULL_DATA . .
} else {
echo 'No Data Pulled';
}
}
这是保持性能的好方法还是有更好的方法?
为防止混淆,A B C D E 不是静态字符串,而是变量,
而且它不总是字母,
它可以是像Hello My World 这样的词,其中查询按Hello My World 然后Hello My 然后Hello 排序值并且这个查询是建立在这个Question 之上的
【问题讨论】:
-
但它总是井然有序吗?或者它可以是“S N A F U”而不是“A F N S U”?
标签: php mysql sql performance query-performance