[英]Large database query: optimisation
我有一個帶有description
屬性的Product
模型。 創建新產品時,我需要查找描述中具有相應引用的產品,並在它們之間創建一個Link
對象。
例子:
Product 1
Description: ".... 58274072 ... "
我需要查找描述中58274072
所有產品:
similar_products = Product.where("description like ?", "%58274072%")
我有兩個問題:
我該如何解決這些問題?
要優化 LIKE 上的索引,您應該使用 trigam 擴展。
為此,您需要安裝模塊 pg_trgm,它為 GIN 和 GiST 三元索引提供運算符類以支持所有 LIKE 和 ILIKE 模式:
示例索引:
CREATE INDEX ON product USING gin (description gin_trgm_ops);
或者:
CREATE INDEX ON product USING gist (description gist_trgm_ops);
您需要在 GIN 或 GiST 之間進行選擇... GIN 查詢速度更快,但創建速度較慢,更新速度較慢,並且通常比 GiST 大。
如果它解決了您的問題,請嘗試此操作。
我建議不要使用like
,而是創建包含 2 列的表 product_references : product_id
, reference
(該列可以被索引)。 一個產品可以有多個引用,因此它將有多個 product_references 行。 然后流程應該改變如下:
Link
對象作為您的業務規則解析、搜索、鏈接和創建新 product_reference 的步驟可以由后台作業處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.