正如標題所述,我試圖計算某個表中最後100條記錄內的匹配數。在前100行中計數匹配
該查詢有效,但數據非常動態,在該特定表上有大量插入,並且類似的查詢正在運行,並且它們最終都會非常緩慢(20s),可能會彼此阻塞。
因爲緩存結果是不可接受的(數據必須是實時的)我正在考慮將外部查詢切換到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?
擺脫包裝的,並補充說,最後的WHERE條件給了別人。返回的行數會告訴你計數。我認爲,關於(division,type,first_name)的複合索引也有幫助。 – Strawberry
在內部查詢中,您只選擇'user_id',但是然後在不同的列('first_name')上過濾結果。這真的有可能嗎?!你確定這個查詢工作嗎?另外,你能寫出表格的模式嗎? – winterlude
@Strawberry只會在整個表格中給我計數,而我在最後的100個條目中需要它。然而,一個複合指數是一個很好的建議,它可能會改善整個事情。 – Carvefx