【发布时间】:2019-10-21 00:31:45
【问题描述】:
SELECT *
FROM many_leads_lead_details
WHERE location LIKE '%Los%Angeles%'
AND (keywords LIKE '%Real%' or
keywords LIKE '%Real Estate%' or
keywords LIKE '%Real Estate Agent%')
与 localhost 数据库相比,上述查询花费了太多时间。
花费时间的数据库托管在另一台服务器上, 响应时间如下 本地主机 = 30.00 秒 和上 rds.amazonaws.com = 1.50 分钟
$leads2 = LeadDetails::query();
$temp = '';
$location = str_replace(' ', '%', explode(',', $campaign->location)[0]);
$leads2->Where('location', 'like', '%' . $location . '%');
//dd($leads2->get());
$leads2->Where(function ($query) use ($campaign, $temp) {
foreach (explode(' ', $campaign->keywords) as $index => $keyword) {
if ($index == 0) {
$temp .= $keyword;
} else {
$temp .= ' ' . $keyword;
}
$query->OrWhere('keywords', 'like', '%' . $temp . '%');
}
});
$leads2->get();
【问题讨论】:
-
suggestion :> 删除 * 并只输入必填列,这会减少你的时间
-
桌子有多大?这部分
or keywords like '%Real Estate%' or keywords like '%Real Estate Agent%'也是多余的。 -
@SamuelCook 目前它有 1000 万行以上,它将增加超过 1 亿,我想要包含房地产、房地产和房地产经纪人的相关数据,这就是我添加
keywords like '%Real%' or keywords like '%Real Estate%' or keywords like '%Real Estate Agent%'的原因跨度> -
执行
LIKE %...%不会很快。考虑使用 fulltext 索引或使用弹性搜索等其他搜索提供程序。 -
@SamuelCook 试图说的是:如果关键字类似于“%Real Estate%”,也类似于“%Real%”。从这个意义上说,它是多余的