現在資料庫中存在乙個tb_user(id, name,age)
表,並且已經針對name
字段建立了索引tb_user_name_idx
。
正常情況下,執行如下sql語句:
explain
analyze
select
*from tb_user where name like
'%aaa%';
發現該sql語句在name
欄位上使用的是seq scan
而不是index scan或bitmap heap scan
,執行時間在1s
以上。
想要在模糊查詢時在name
欄位上使用索引,需要執行如下sql語句
create extension pg_trgm;
create
index tb_user_name_trgm_gist_idx on tb_user using gist(name gist_trgm_ops)
;
此時,再執行:
explain
analyze
select
*from tb_user where name like
'%aaa%';
發現該sql語句在name
欄位上使用了bitmap heap scan
,使用到了新建立的索引,而且執行時間減少到20-30ms
。 PG 模糊查詢 json欄位索引
查詢sql select from test where content order by content desc limit 1 以上由於內部機制不加排序會不觸發gin索引,所以要加排序 原先不加limit,不走索引 首先表裡面有99w行記錄,content欄位是jsonb格式的,上面有gin索...
在模糊查詢中使用ESCAPE
這個問題也是無意中得知的,原因在於我在模糊查詢的時候輸入了乙個 誰知將全部結果都查詢出來了,想了一下,既然是萬用字元,輸了個 進去,當然全部查詢出來了,避免的辦法就是使用escape。sql語句可以寫成 select from tablename where colname like input e...
ibatis中使用like模糊查詢
無效的方法 select from table1 where name like name 兩種有效的方法 1 使用 代替 此種方法就是去掉了型別檢查,使用字串連線,不過可能會有sql注入風險。select from table1 where name like name 2 使用連線符。不過不同的...