在PostgreSQL中是否可以在包含多个表的字段的表达式上放置索引.例如,加速查询以下形式的索引:
SELECT *, (table1.x + table2.x) AS z
FROM table1
INNER JOIN table2
ON table1.id = table2.id
ORDER BY z ASC
Run Code Online (Sandbox Code Playgroud) 我将对象存储在由许多整数属性描述的数据库中.真实的对象有点复杂,但现在让我们假设我在我的数据库中存储汽车.每辆车都有很多整数属性来描述汽车(即最大速度,轴距,最大功率等),这些属性可由用户搜索.用户为每个对象定义了一个首选范围,因为有很多属性,所以很可能不会有任何匹配所有属性范围的汽车.因此,查询必须返回按最佳匹配排序的多个汽车.
目前我使用以下查询在MySQL中实现了这一点:
SELECT *, SQRT( POW((a < min_a)*(min_a - a) + (a > max_a)*(a - max_a), 2) +
POW((b < min_b)*(min_b - b) + (b > max_b)*(b - max_b), 2) +
... ) AS match
WHERE a < (min_a - max_allowable_deviation) AND a > (max_a + max_allowable_deviation) AND ...
ORDER BY match ASC
Run Code Online (Sandbox Code Playgroud)
其中a和b是对象的属性,min_a,max_a,min_b和max_b是用户定义的值.基本上,匹配是期望范围与属性的实际值之间的平方差之和的平方根.值0表示完美匹配.
该表包含几百万条记录,并且仅引入WHERE clausule以限制执行计算的记录数.索引放在所有可查询记录上,查询大约需要500ms.我想改进这个数字,我正在研究改进这个查询的方法.
此外,我想知道是否会有更适合执行此工作的不同数据库.此外,由于其更灵活的数据方案选项,我非常希望更改为NoSQL数据库.我一直在研究MongoDB,但找不到有效(快速)解决这个问题的方法.
有没有比MySQL更适合这项工作的数据库?
有没有办法告诉Rails某个文件夹中的所有文件都包含在某个命名空间中?
就是
我有一个文件bar.rb在app/foo。Rails将假定此文件已定义Bar,但我希望此文件定义Foo::Bar。
我知道我可以通过将根目录添加到Rails的自动加载路径来实现此目的,但这不是一个真正的解决方案。还有其他方法可以告诉Rails,其中的所有文件都app/foo驻留在Foo名称空间中吗?
编辑:文件树进行澄清
app
assets
controllers
models
foo
bar.rb
quux.rb
Run Code Online (Sandbox Code Playgroud)
我希望能够分别定义Foo::Bar和和中,同时还使用Rails自动加载。无需诉诸如下的树形结构:Foo::Quuxbar.rbquux.rb
app
assets
controllers
models
foo
foo
bar.rb
quux.rb
Run Code Online (Sandbox Code Playgroud)