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%')
与本地主机数据库相比,上述查询花费了太多时间。
数据库占用时间托管在另一台服务器上, 响应时间如下 本地主机 = 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();
最佳答案
此查询:
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%')
需要全表扫描。由于 LIKE
模式开头存在通配符,因此无法使用索引。
我的第一个建议是修复您的数据模型。我怀疑您在关键字中存储了多个值。这些应该位于单独的表中。
第二个建议是使用全文搜索——match()
函数。这个话题太长了,无法在这里回答。您应该从 documentation 开始.
关于mysql - 简单的选择查询在具有大数据集 10M 的 mysql 表中花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56461470/