作者 主題: PostgreSQL使用LIKE時的效能  (閱讀 3922 次)

0 會員 與 1 訪客 正在閱讀本文。

playman

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
PostgreSQL使用LIKE時的效能
« 於: 2010-04-30 14:57 »
原文在這邊
http://www.ichiayi.com/wiki/tech/psql_tips

小弟因為公司有在網站上做活動, 會發送序號
而序號每批都會不同, 前批的序號又不能刪除
如果前批沒發完, 下次發時要把前批也一起混在裡面發
所以序號的table裡, 有一個欄位是批號(varchar 50)
批號多為SNA001 ~ SNA999
或是SNB001 ~ SNB999

所以在php裡,我使用select時, 都會使用WHERE 批號 LIKE 'SNA%'
所以cost都不少, 其他部份都蠻快的, 就這部份很花時間
然後也加了index, 但是explain後, 沒有看到它有去使用index

上網查文章, 上面文章的前輩, 他在index裡,多增加了varchar_pattern_ops
原本我的批號是
代碼: [選擇]
CREATE INDEX "card_item_shipto_index" ON "public"."card_item"
  USING btree ("shipto");

把這index刪掉後, 重新create index為
代碼: [選擇]
CREATE INDEX "card_item_shipto_index" ON "public"."card_item"
  USING btree ("shipto" varchar_pattern_ops);

原本cost從13xxxx.xx 變為 39806.08

網頁跑一次, 真的變快了, 原本做一次, 網頁要跑4~5秒, 現在2~3秒就有result了

跟大家分享一下!