正如标题所述,我正在尝试计算某个表中最后100条记录中的匹配数。
此查询有效,但数据非常动态,在该特定表上有大量插入,并且正在运行类似的查询,并且它们最终都非常慢(20秒)可能会相互阻塞。
因为缓存结果是不可接受的(数据必须是实时的)我正在考虑将外部查询切换到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
只是为了直截了当,由于NDA原因,这显然不是实际的表/数据,但是,表格看起来与不同的列名完全相同。
所以,我想要实现的目标是在最近100条有一些约束的记录中找到匹配的数量。
例如,
how many times does the name 'John' appear within the last 100 employees added in the HR division?
答案 0 :(得分:0)
我明白了。
这样的事情怎么样......
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;
答案 1 :(得分:0)
试试这个:
SELECT SUM(matches)
FROM
(
SELECT IF(first_name = 'some_first_name_here', 1, 0) AS matches
FROM customers
WHERE division = 'some_division' AND type = 'employee'
ORDER BY request_time DESC
LIMIT 0,100
) AS entries