如何使用多个LIKE谓词优化查询

时间:2019-04-29 13:59:06

标签: sql optimization firebird

我想提取所有具有“ valeur_lisible”,“ lnk_attributs_objets.valeur”或“ attribut.nom”等于“%gingivite%”的人员。

我的请求如下:

#include <iostream>
#include <regex>

using namespace std;

string cutter(const string &src) {
 regex e("[ ;]+");
 string out = std::regex_replace(src,e," ");
 return out.substr(1, out.size()-2);
}

int main()
{
 string s1 = "[1 -2.5 3;4 5.25 6;7 8 9.12]";

 cout << cutter(s1) << endl;   
 return 0;
}

在我的小型数据库(926人)中,这已经花费了大约4s。
有没有一种方法可以优化我的请求?
我是SQL的初学者。

备注:我使用LEFT JOIN是因为一个人可以具有valeur_lisible的属性,但是没有objets(属性链接到objets)并且相反。

编辑::这是表之间关系的方案: enter image description here

我将要检查为牙龈炎的值涂成蓝色。

1 个答案:

答案 0 :(得分:0)

我终于找到了如何显着减少此请求的时间:
-使用INNER JOIN的UNION代替LEFT JOIN
-将WHERE条件放在“内部联接”上

这是我的最终要求:

year;country;kills
1970;Dominican Republic;58
1970;Mexico;130
1970;Philippines;160
1970;Greece;78
1970;Japan;101
1970;United States;217
1970;Uruguay;218
1970;United States;217
1970;United States;217

仅需0.07s(而不是之前的4s)