此查询从可靠的小表(当前数千行)返回建议列表(提示)。但它提示的速度太慢而且非常有用。大多数其他问题建议轮询DB以了解减速的位置。我真的无法获得必要的访问权限。它目前看起来像下面,也许有人可以帮助我看到一个我不知道的技术。我真的想加快以下查询。
$stmt = $db_found->prepare("SELECT DISTINCT callsign, Fname, ID, grid,
tactical, latitude, longitude, email, Lname
FROM NetLog
WHERE recordID IN (SELECT max(recordID)
FROM NetLog
WHERE callsign LIKE ?
AND callsign NOT IN ('W0KCN','WA0QFJ','T0EST','K0ERC','NR0AD')
GROUP BY callsign)");
这样它就可以拉出最新版本的recordID。 recordID是此表中的自动增量变量。如果我删除第一个FROM和WHERE,那么查询执行得更快。喜欢这里;
$stmt = $db_found->prepare("SELECT DISTINCT callsign, Fname, ID, grid, tactical, latitude,
longitude, email, Lname, recordID
FROM NetLog
WHERE callsign LIKE ?
AND callsign NOT IN ('W0KCN','WA0QFJ','T0EST','K0ERC','NR0AD')
GROUP BY callsign");
问题在于无法保证这是最新的记录。
如何加快回报速度,仍然可以确保我获得此呼号的最新记录ID?
答案 0 :(得分:2)
除了使用执行计划验证实际操作之外,您还可以尝试以不同方式处理数据
您可以尝试使用dinamic(temp)表而不是IN子句
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="textInput"></textarea>
<button id="submitBtn">Submit</button>
答案 1 :(得分:0)
将查询限制为1,并按app.use(flash());
对结果进行排序。这样就不必返回整个表格内容。
答案 2 :(得分:0)
如果您想优化查询,explain总是很好,它计划确定问题是什么。我猜,是呼号字段缺少索引。
您使用LIKE运算符,因此您可能需要使用full text index。
DISTINCT
在此查询中看起来不是必需的,因为您在子查询中已经有GROUP BY