MySQL的。通过公共ID对列进行分组匹配

时间:2017-03-22 20:34:27

标签: mysql database performance

我正在编写一个包含多个过滤器的搜索页面,我想知道这是否是获得结果的最佳方法。

搜索的每个结果都有几个属性,这里我使用两个属性来简化示例。

主要'项目'表:

EnumObject

'语言'表:

enumObject

'attributes_one'表:

getApplications(): Promise<Applications[]> {
    return this.http.get(this.api + "/applications")
               .map(response => response.json() as Applications[])
               .toPromise();
}

'attributes_one_translations'表:

id_items
1
2

'attributes_one_match'表:

id_languages | language_code
1              es
2              en

'attributes_two'表:

id_attributes_one
1
2

'attributes_two_translations'表:

id_attributes_one_translations | id_attributes_one | id_language_code | translation
1                              | 1                 | 1                | Oro
2                              | 1                 | 2                | Gold
3                              | 2                 | 1                | Plata
4                              | 2                 | 2                | Silver

'attributes_two_match'表:

id_attributes_one_match | id_attributes_one | id_items
1                       | 1                 | 1
2                       | 2                 | 1
3                       | 1                 | 2

概念是每个属性表可以有一个或多个匹配项,并且该匹配可以有0个或更多个翻译。

当用户选择过滤器以获取具有此属性方兴未知的attribute_one“Gold”或“Silver”顺序的所有项目时,我正在使用的查询:

id_attributes_two
1

我得到的结果是:

id_attributes_two_translations | id_attributes_two | id_language_code | translation
1                              | 1                 | 2                | 99% gold

这个结果正是我所期待的。现在:

id_attributes_two_match | id_attributes_two | id_items
1                       | 1                 | 1

我担心性能,因为每次用户更改其中一个过滤器(它更新过滤器和结果)时,我正在执行的搜索过滤器页面会通过ajax自行更新。每页的最大结果将是1000个项目,我没有将LIMIT放在示例的查询中。

我不是一个SQL专家,所以我真的不知道我在做什么是最好的方法。我希望得到一些反馈。

非常感谢!

0 个答案:

没有答案