如何避免Sphinx索引中的列重复?

时间:2015-01-29 10:22:42

标签: mysql sphinx

我的sphinx.conf文件中有一个主要来源,在球场中看起来像这样:

sql_query = \
    SELECT \
        a.id, \
        a.filter_by_id, \
        a.filter_by_bool, \
        a.search_from_1, \
        b.search_from_2, \
        c.search_from_3, \
        a.sort_by_date, \
        d.sort_by_float \
    FROM \
        table1 AS a \
    LEFT JOIN \
        table2 AS b ON a.b_id = b.id \
    LEFT JOIN \
        table3 AS c ON a.c_id = c.id \
    LEFT JOIN \
        table4 AS d ON a.id = d.a_id AND d.domain = 1 

sql_attr_uint       = filter_by_id
sql_attr_bool       = filter_by_bool
sql_field_string    = search_from_1
sql_field_string    = search_from_2
sql_field_string    = search_from_3
sql_attr_timestamp  = sort_by_date
sql_attr_float      = sort_by_float

然后我有9个继承的源只覆盖sql_query = ... d.domain = N部分... aaand之后我为每个源定义了10个单独的索引....因此使我的searchd.exe耗尽了10倍存储器中。

因为对于table1中的每条记录,每个域的sort_by_float都有不同的值。

Sphinx方面是否有办法处理索引上的重叠,或者我应该将所有不同的域sort_by_float值绑定为一个索引上的单独列?

初始表在1-10m记录之间都相当小,Sphinx索引很简单,几乎都落在默认设置上。

1 个答案:

答案 0 :(得分:1)

  

应该将所有不同的域sort_by_float值绑定为一个索引上的单独列吗?

是。这听起来是最好的主意。数据透视表的排序。

此外,sql_field_string会将列设为字符串属性字段。如果您不需要它作为属性,可以通过将其保留为字段来节省内存。