正如标题所述,我正在尝试计算某个表中最后 100 条记录中的匹配数。
此查询有效,但数据非常动态,在该特定表上有大量插入,并且正在运行类似的查询,它们最终都非常慢(20 秒),可能会相互阻塞。
因为缓存结果是 Not Acceptable (数据必须是实时的),我正在考虑将外部查询切换到 PHP,尽管我知道这会更慢,因为它仍然会快于 20 秒。
这是查询
SELECT count(*) as matches
FROM (
SELECT first_name FROM customers
WHERE division = 'some_division'
AND type = 'employee'
ORDER BY request_time DESC
LIMIT 0, 100
) as entries
WHERE first_name = 'some_first_name_here'
我正在寻找一种更优化的方法来执行相同的任务,而不必在 PHP 中实现它,因为这是一种幼稚/明显错误的方法。
表格看起来像这样:
id first_name last_name type division request_time
为了澄清问题,由于保密协议(protocol)的原因,这显然不是实际的表/数据,但是,该表看起来与不同的列名称完全相同。
再说一次,我想要实现的是提取在最后 100 条有一些限制的记录中找到的匹配项的计数。
例如,
how many times does the name 'John' appear within the last 100 employees added in the HR division?
最佳答案
我明白了。
像这样的怎么样......
SELECT i
FROM
( SELECT CASE WHEN first_name = 'some_first_name_here' THEN @i:=@i+1 END i
FROM customers
WHERE division = 'some_division'
AND type = 'employee'
, (SELECT @i:=0)val
ORDER
BY request_time
DESC
LIMIT 0,100
) n
ORDER
BY i DESC
LIMIT 1;
关于mysql - 计算前 100 行中的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23540887/