[英]Postgresql SELECT performance and optimization
我有一個包含 14_000 行的表。 不是很多。 我的查詢
SELECT "wells".* FROM "wells" WHERE (LOWER(name) LIKE '%abc%' OR code LIKE '%ABC%')
ORDER BY "wells"."name_nso" ASC, "wells"."extra_name" ASC
LIMIT 10;
需要“執行時間:2.701 毫秒”
對於這個表,我有兩個索引:
CREATE INDEX wells_btree_idx_on_name_nso
ON public.wells USING btree
(name_nso COLLATE pg_catalog."default" ASC NULLS LAST)
TABLESPACE pg_default;
和
CREATE INDEX wells_gin_idx_on_name_lower
ON public.wells USING gin
(lower(name) COLLATE pg_catalog."default" gin_trgm_ops)
TABLESPACE pg_default;
如果我刪除 LIMIT 10,則需要“執行時間:0.894 毫秒”。 快了 4 倍。
是否值得研究如何將 LIMIT 10 的查詢加速到 0.894 毫秒,或者那些 2.701 毫秒是否足夠快並且不值得打擾?
PostGreSQL 是運行帶有不敏感大小寫排序規則的 LIKE 運算符時最慢的 RDBMS。 您需要使用 LOWER 或 UPPER,因為 ICU 整理存在錯誤...閱讀: https : //www.postgresql.org/message-id/CACykOPQKHGRLzuAB1Mvn9Pizatp9g%3DJG_CHYxn4VOD%2BD7E4Vcg%40mail.gmail.com
您可以使用 citext 類型來執行此操作...
你的索引用兩個 %...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.