我在一个有720万行的表上运行不区分大小写的搜索,我想知道是否有任何方法可以更快地进行此查询?
目前,只需一个搜索参数,执行大约需要11.6秒,我担心只要添加多个搜索参数,此查询就会变得非常慢。
SELECT count(*)
FROM "exif_parse"
WHERE (description ~* 'canon')
--- ---编辑
phpPgAdmin告诉我这个列上有一个索引,定义如下:
desc_idx CREATE INDEX desc_idx ON exif_parse USING btree (description)
---编辑2 ----
数据库包含以下格式的记录:
imaage_id exif_field description
我正在将描述作为搜索运行,因此它包含从色调曲线(0,0,32,22,64,56,128,128,192,196,255,255)到镜头(宾得)的数据-F FISH-EYE 1:3.5-4.5 17-28mm)制作(佳能EOS REBEL XSi)
答案 0 :(得分:4)
你应该看看using FTS。
答案 1 :(得分:2)
你可以像这样创建一个索引:
CREATE INDEX idx_exif_parse_description_vpo
ON exif_parse (lower(description) varchar_pattern_ops)
以下查询将需要几毫秒才能完成:
SELECT count(*)
FROM "exif_parse"
WHERE (lower(description) LIKE 'canon')
FTS对此有点过头了。