我有以下查询:
SELECT dt_stamp
FROM claim_notes
WHERE type_id = 0
AND dt_stamp >= :dt_stamp
AND DATE( dt_stamp ) = :date
AND user_id = :user_id
AND note LIKE :click_to_call
ORDER BY dt_stamp
LIMIT 1
该claim_notes
表有大约一百万行,因此该查询运行非常缓慢,因为它必须搜索未索引的note
列(我对此无能为力)。我知道,当应用type_id
、dt_stamp
和user_id
条件时,我将搜索大约 60 行而不是 50 万行。但是 MySQL 似乎并没有按顺序应用这些。我想做的是看看是否有办法告诉 MySQL 只将note LIKE :click_to_call
条件应用于满足前一个条件的行,这样它就不会搜索具有这个条件的所有行。
我想出的是:
SELECT dt_stamp
FROM (
SELECT *
FROM claim_notes
WHERE type_id = 0
AND dt_stamp >= :dt_stamp
AND DATE( dt_stamp ) = :date
AND user_id = :user_id
)
AND note LIKE :click_to_call
ORDER BY dt_stamp
LIMIT 1
这很有效,而且速度非常快。我只是想知道这是否是正确的方法,或者是否有更官方的方法来处理它。