簡體   English   中英

Postgresql SELECT 性能和優化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM