千家信息网

laravel怎么强制指定索引进行查询

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,本篇内容介绍了"laravel怎么强制指定索引进行查询"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2024年11月17日laravel怎么强制指定索引进行查询

本篇内容介绍了"laravel怎么强制指定索引进行查询"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

为什么需要强制索引?

数据库没有使用我们设想的索引进行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);    }}
  • 在laravel的代码里面需要这样写:

在这里用when方法来判断此索引是否存在,日过不存在的话就不用这个索引,不然会报错,避免有人误删索引后,导致系统报错。

此处强制索引的语句是:

->from(DB::raw('`erp_agents` FORCE INDEX (`test`)'))

例如:

$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']);

"laravel怎么强制指定索引进行查询"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0