以下两个查询组件的性能如何比较?
更喜欢
... LOWER(description) LIKE '%abcde%' ...
Run Code Online (Sandbox Code Playgroud)
我喜欢
... description iLIKE '%abcde%' ...
Run Code Online (Sandbox Code Playgroud) postgresql performance pattern-matching database-performance
我需要在表中创建类似字符串的排名.
我有下表
create table names (
name character varying(255)
);
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用提供该功能的pg_trgm模块similarity,但我遇到了效率问题.我创建了一个像Postgres手册建议的索引:
CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);
Run Code Online (Sandbox Code Playgroud)
我正在执行以下查询:
select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name
from names n1, names n2
where n1.name != n2.name and similarity(n1.name, n2.name) > .8
order by sim desc;
Run Code Online (Sandbox Code Playgroud)
查询有效,但是当你有数百个名字时,它确实很慢.此外,也许我忘了一点SQL,但我不明白为什么我不能使用条件and sim > .8没有得到"列sim不存在"错误.
我想要任何提示使查询更快.
我使用SQLite3进行开发,使用PostgreSQL进行部署.但是,我面临以下问题:
我的简单搜索使用SQLite3:
def self.search(search)
if search
find(:all, :conditions => ["style LIKE ? OR construction LIKE ?", "%#{search}%", "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用PostgreSQL,我需要替换LIKEfor ILIKE来解决问题:
def self.search(search)
if search
find(:all, :conditions => ["style ILIKE ? OR construction ILIKE ?", "%#{search}%", "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
是否有"Ruby方式"在任何数据库中进行这些搜索?
编辑 - 基于您的答案我不相信我会找到一个通用的Ruby解决方案.
我也跟着Ruby on Rails的教程:学习的榜样导轨-由迈克尔·哈特尔,在最终的Gemfile显示这两个数据库...嗯,令人失望...
我有一个问题,希望得到你的回答:-)
因此,我使用geonames.org并将所有德国城市的数据导入所有地区.
如果我进入"汉堡",它会列出"汉堡中心,汉堡机场"等.该应用程序位于一个无法访问互联网的封闭网络中,因此我无法访问geonames.org Web服务并且必须导入数据.:(所有区域的城市都是自动完成的.所以每次击中都会导致XHR请求等等.
现在我的客户询问是否可以获得世界上的所有数据.最后,大约5.000.000行,有45.000.000个替代名称等.
Postgres每个查询需要大约3秒钟,这使得自动完成无法使用.
现在我想到了CouchDb,已经使用过了.我的问题:
我想发布"Ham",我希望CouchDB获取所有以"Ham"开头的文档.如果我进入"汉堡",我希望它能够返回汉堡,等等.
CouchDB是否适合它?您可以推荐哪些其他数据库以低延迟(可能是内存中)和数百万个数据集进行响应?数据集不会定期更改,而是相当静态!
我有两栏说Main和Sub。(它们可以在同一张桌子上,也可以不在同一张桌子上)。
Main是长度为20 Sub的varchar,长度为8的varchar。始终
Sub是的子集,并且是的后8个字符。MainMain
我可以成功设计一个查询来匹配使用模式 substr("Main",13,8)
查询:
select * from "MainTable"
where substr("MainColumn",13,8) LIKE (
select "SubColumn" From "SubTable" Where "SubId"=1043);
Run Code Online (Sandbox Code Playgroud)
但我想在查询中使用Like,%,_等,以便可以轻松地匹配模式(不是全部8个字符)。
问题是我该怎么做?!
我知道下面的查询是完全错误的,但是我想实现这样的目标,
Select * from "MainTable"
Where "MainColumn" Like '%' Select "SubColumn" From "SubTable" Where "SubId"=2'
Run Code Online (Sandbox Code Playgroud) postgresql ×5
performance ×2
couchdb ×1
indexing ×1
search ×1
similarity ×1
sql ×1
sqlite ×1
text ×1