laravel eloquent 判断索引是否存在并强制指定索引进行查询
2023-04-18 16:11:10 时间
为什么需要强制索引?
数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。
mysql强制索引查询语句
- select * from user where age = 26 force index(age); // 强制索引
- select * from user where age = 26 use index(age); // 优先按照这种索引查找
/**
* 检测某个表中是否存在某个索引
* @param $table
* @param $index
* @return bool
* @author zhaohao
* @date 2019-08-26 17:42
*/
if(!function_exists('hasIndex')) {
function hasIndex($table, $name)
{
$conn = IlluminateSupportFacadesSchema::getConnection();
$dbSchemaManager = $conn->getDoctrineSchemaManager();
$doctrineTable = $dbSchemaManager->listTableDetails($table);
return $doctrineTable->hasIndex($name);
}
}
PHP
Copy
- 在laravel的代码里面需要这样写:
在这里用when方法来判断此索引是否存在,日过不存在的话就不用这个索引,不然会报错,避免有人误删索引后,导致系统报错。 此处强制索引的语句是:
->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'))
PHP
Copy 例如:
$agents = Agent::where($whereType)
->when(hasIndex('Agent', 'test'),function ($q){
$q->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'));
})
->when(request('position',false),function ($q){
$q->whereIn('position_id',request('position'));
})
->whereIn('agents.status', $validStatus)
->where('worked_at', '<=', $end)
->where('is_suppose', 0)
->addDomination('m.statistics-human-view')
->leftJoin('positions', 'positions.id', '=', 'agents.position_id')
->get(['worked_days', 'worked_at']);
PHP
Copy
相关文章
- 值得关注的云计算6大趋势,包括量子计算、机器学习等
- 腾讯云六大边缘可用区同日开服,持续加速新基建布局
- 一分钟教你什么是“路由表”?
- 4G仍在增长,5G全面普及还需静待
- 欧盟将加速5G大数据布局 行业组织称缩小与中美等国差距刻不容缓
- 5G将如何改善智慧城市的超连接性
- 云计算是物联网的重要支柱
- 如何设计一个厉害的API接口
- 连接需求激增,5G成ICT行业可持续发展的关键
- 《6G无线热点技术研究白皮书》(2020)发布
- 十年新起点,SAP HANA Cloud再启航,正式落地阿里云
- Python | Numpy:详解计算矩阵的均值和标准差
- 如何计算混合云的总成本
- 边缘计算和5G如何推动商业应用
- Kafka集群的搭建
- 秒杀5G!德国团队实现迄今最高速无线传输,每秒14G数据
- 云原生内存数据库解锁存算一体
- 揭秘机密计算:弥补最后一个入侵 “漏洞”
- 图文详解:Kafka到底有哪些秘密让我对它情有独钟呢?
- 西瓜书习题详解 机器学习能在互联网搜索的哪些环节起什么作用?