我正在编写PostgreSQL查询,以使用LIKE子句从数据库表中搜索客户端名称。但是,我注意到,如果缓慢输入搜索词并且输入速度非常快,该查询将给出预期的结果,它会读取整个单词,但显示的结果仅适用于输入单词的第一个字母。请在下面找到我的查询:
SELECT
i.id,
i.at::date,
TRIM(CONCAT(hc.first,' ', hc.family)) as billingname
FROM invoice i
LEFT JOIN clients hc ON i.c_id = hc.id
WHERE (
(LOWER(TRIM(CONCAT(hc.first,' ',hc.family))) LIKE LOWER($1))
OR (LOWER(hc.first) LIKE LOWER($1))
OR (LOWER(hc.family) LIKE LOWER($1))
OR (CAST(i.id AS TEXT) LIKE $1)
)
GROUP BY 1, 2, 3
如果我搜索“ Clive”,它将给出以“ c”开头的名称,而不是其他名称。以下是当我键入“ clive”时终端在我的应用程序中调用API时显示的内容。
INFO 2019-03-29 09:30:08,722 module.py:880] default: "POST /api/query?q=%5B%5B%22searchName%22%2C%22cliv%25%22%5D%5D HTTP/1.1" 200 166
INFO 2019-03-29 09:30:08,909 module.py:880] default: "POST /api/query?q=%5B%5B%22searchName%22%2C%22clive%25%22%5D%5D HTTP/1.1" 200 166
INFO 2019-03-29 09:30:10,326 module.py:880] default: "POST /api/query?q=%5B%5B%22searchName%22%2C%22c%25%22%5D%5D HTTP/1.1" 200 27212
这是LIKE子句性能问题还是我的查询有问题?非常感谢您的帮助。