精华内容
下载资源
问答
  • 1.直接上图,如下是查询的原生sql: 1 EXPLAIN SELECT 2 `erp_agents`.`company_id` 3 FROM 4 `erp_agents` FORCE INDEX (`test`) 5 LEFT JOIN `erp_positions` ON `erp_positions`.`id` = `erp_agents`...

    1.直接上图,如下是查询的原生sql:

     1 EXPLAIN SELECT
     2     `erp_agents`.`company_id`
     3 FROM
     4     `erp_agents` FORCE INDEX (`test`)
     5 LEFT JOIN `erp_positions` ON `erp_positions`.`id` = `erp_agents`.`position_id`
     6 WHERE
     7     `erp_agents`.`status` IN ('预离职', '正常')
     8 AND `worked_at` <= '2018-09-30 23:59:59'
     9 AND `is_suppose` = '0'
    10 AND `erp_agents`.`company_id` = '2'
    11 AND `erp_agents`.`deleted_at` IS NULL
    12 AND `erp_agents`.`company_id` = '2'

     

    2.在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']);

     

    over!

    转发请注明出处!

    转载于:https://www.cnblogs.com/qaing123/p/9767917.html

    展开全文
  • Laravel Indexer监视页面上运行的SELECT查询,并允许将数据库索引动态添加到SELECT查询中。 然后在页面上直接显示EXPLAIN或MySQL执行计划的结果。 Indexer提供的结果将帮助您查看哪些索引最适合页面上运行的不同...
  • 引言对于数据库查询,主键和索引往往是加速搜索的利器。而对于文本搜索, 模糊搜索,全文检索,MySQL的MyISAM引擎虽然支持,但是性能往往不能达到生产的需求, 或者说服务带载能力太弱。我们需要专门的文本搜索引擎...

    引言

    对于数据库查询,主键和索引往往是加速搜索的利器。而对于文本搜索, 模糊搜索,全文检索,MySQL的MyISAM引擎虽然支持,但是性能往往不能达到生产的需求, 或者说服务带载能力太弱。

    4518400efe2fe72efa8607d819f14103.png

    我们需要专门的文本搜索引擎,并且连接到laravel应用程序内,这就是本文所要说的Scout。

    代码时间

    laravel scout 是一个独立的包和类库,可以很方便地通过composer接入系统, 且与Eloquent Model模型关联使用。

    官方scout内置了 AlgoliaElasticsearch 驱动,但是社区也提供了其他可选项。 如果默认的话,优先选用的肯定是 Algolia

    laravel 5.3及以上版本为系统引入scout库:

    composer require laravel/scout

    然后在 config/app.php 文件内的 providers 服务提供者内加入如下内容:

    'providers' => [    LaravelScoutScoutServiceProvider::class,]

    如果想要使用配置文件设置scout,那么就把配置文件发布出来:

    php artisan vendor:publish

    这会生成 config/scout.php 文件。我们再引入 algolia 的sdk库文件,以便在程序内使用:

    composer require algolia/algoliasearch-client-php

    想要在模型内引入搜索服务,只需在模型文件内引入

    use LaravelScoutSearchable;

    在模型内手动实现,那些属性和字段可以被搜索,只需实现 toSearchableArray() 方法。 然后实现 searchableAs(),返回一个字符串,用于指定索引的模型名。

    scout默认订阅了模型的 create/delete/update 时间,这些写操作的数据会触发更新索引, 删除索引,创建索引。方式可以是同步,也可以放到队列内异步处理。

    通过索引进行搜索,scout在查询方式上几乎与eloquent model的方式别无二致。比如:

    Review::search('Lious')->get();

    或者链式调用分页:

    Review::search('Lious')->paginate(20);

    由于 search 方法返回的是Query Builder对象,可以链式调用查询条件,和集合的方法。 比如对查询结果集进行过滤:

    Review::search('Lious')->where('account_id', 2)->get();

    你在模型内使用的方法,这里都适用。

    对于某些数据有可能并不想建立索引,放入搜索引擎,那么只需在模型内显式声明如下:

    Review::withoutSyncingToSearch(function () {    factory(Review::class, 10)->create();});

    批量创建10条数据,且不建立索引。

    手动控制某些输入放入搜索引擎,建立索引数据,则可以链式调用 searchable() 方法:

    Review::all()->searchable();

    或者通过关联关系,将关联模型的数据写入搜索引擎:

    $user->reviews()->searchable();

    某些搜索数据不进行索引:

    Review::where('actived', false)->unsearchable();

    无效的条目不加入索引,节省空间。

    假如你的数据库已经生产了大量的数据,或者在测试阶段,想要手动把所有的定义数据 导入到搜索引擎,可以在命令行如此操作:

    php artisan scout:import AppReview

    写在最后

    本文通过介绍laravel scout索引类的方法,向大家展示了如何引入搜索引擎, 以及在程序内精细化控制索引数据的方法。全文检索在现代的web应用中应对高并发的 场景很有一套,值得大家深入研究学习。

    Happy coding :-)

    我是@程序员小助手,持续分享编程知识,欢迎关注。

    展开全文
  • 我正在使用Laravel 5.4我有3个型号:Order,OrderLine和Product .订单hasMany()OrderLines OrderLine hasOne()产品通过OrderLine模型中的product_id(我已经正确索引了这个,至少我认为!)我的要求是检索产品用于特定...

    我正在使用Laravel 5.4

    我有3个型号:Order,OrderLine和Product .

    订单hasMany()OrderLines OrderLine hasOne()产品通过OrderLine模型中的product_id(我已经正确索引了这个,至少我认为!)

    我的要求是检索产品用于特定品牌名称的所有订单和订单线 .

    这是我雄辩的查询 . 我知道查询有效但是当放在一个大型数据集上时它似乎无限运行(大约10,000个Orders,12,000个OrderLines / Products)

    $orders = Order::whereBetween('order_date', [$this->start_date,$this->end_date])

    ->whereHas('lines', function ($q1){

    $q1->whereHas('product', function ($q2){

    $q2->where('brand', 'Brands>SanDisk');

    });

    })->with('lines')->with('lines.product')->get()->toArray();

    通过toSql()方法进行调试时,会生成以下SQL .

    select

    *

    from `orders`

    where

    `order_date` between ? and ?

    and

    exists (select * from `order_lines` where `orders`.`id` =`order_lines`.`order_id`

    and

    exists (select * from `products` where `order_lines`.`product_id` = `products`.`id` and `brand` = ?))

    我创建表的3次迁移如下(为简单起见,我除了键之外删除了所有内容):

    Schema::create('orders', function (Blueprint $table) {

    $table->increments('id');

    });

    Schema::create('order_lines', function (Blueprint $table) {

    $table->increments('id');

    $table->integer('product_id');

    $table->integer('order_id');

    });

    Schema::create('products', function (Blueprint $table) {

    $table->increments('id');

    });

    然后我添加了以下索引:

    Schema::table('order_lines', function (Blueprint $table) {

    $table->integer('product_id')->unsigned()->change();

    $table->foreign('product_id')->references('id')->on('products');

    });

    EXPLAIN语法的结果如下:

    1 PRIMARY orders ALL 91886 Using where

    2 DEPENDENT SUBQUERY order_lines ALL 93166 Using where

    3 DEPENDENT SUBQUERY products eq_ref PRIMARY PRIMARY 4 mymemory_main.order_lines.product_id 1 Using where

    展开全文
  • 实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。2、 特点(1)、存储性 比较适合存储大量的没有规则、无序的数据。...

    f96a285b15264046cef0290fe809d5b5.png

    1、简介

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。

    2、 特点

    (1)、存储性

    比较适合存储大量的没有规则、无序的数据。

    =存储量大:单表实现存储PB级别的数据

    (2)、效率性

    数据的效率,就是指存储和读写速度。

    3、 应用范围和限制

    缺点:不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用。

    适用于:日志系统,股票数据等。

    不适用于:电子商务系统等需要连多表查询的功能。

    4.1文档

    文档是mongoDB中数据的基本单元,类似关系数据库的行,

    多个键值对有序地放置在一起便是文档。

    MongoDB 中以文档的方式存取记录,如一条记录格式如下:

    { “username”:”Tom”, “age”:10 ,email:’xiaobai@sohu.com’,’sex’:男,键,值}

    { "username":"Tom" , "age" : "10" }

    注意:

    (1)以上是几个不同的文档,MongoDB区分大小写的数据类型,第一个age字段是数字类型,第二个age是字符串类型。

    (2)每一个文档尺寸不能超过16M

    4.2、集合

    集合就是一组文档,多个文档组成一个集合,集合类似于 mysql里面的表 。

    无模式是指,在同一个集合中可以包含不同格式的文档

    在Mysql需要先建表再插入数据,

    模式自由(schema-free):意思是集合里面没有行和列的概念

    注意:MongoDB中的集合不用创建没有结构,所以可以放不同格式的文档。

    4.3、数据库

    多个集合可以组成数据库。一个mongoDB实例可以承载多个数据库,他们之间完全独立。

    Mongodb中的数据库和Mysql中的数据库概念类似,只是无需创建

    一个数据库中可以有多个集合。

    一个集合中可以有多个文档。

    4.4、MongoDB的数据体系

    9abb602fb58f5eec83391d99e049a078.png
    展开全文
  • 前言又和大家见面了!又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿。有的是因为质量没有达到预期还准备再加点...经过排查后,确定原因是SQL在执行时,MySQL优化器选择了错误的索引(不应该说是“错误”...
  • 聚合统计查询性能优化由 学院君 创建于2个月前, 最后更新于 2个月前版本号 #1304 views2 likes2 collects前面学院君已经简单演示了在 Laravel 项目中如何通过索引、渴求式加载和指定查询字段优化数据库查询性能,...
  • 引言对于数据库查询,主键和索引往往是加速搜索的利器。而对于文本搜索, 模糊搜索,全文检索,MySQL的MyISAM引擎虽然支持,但是性能往往不能达到生产的需求, 或者说服务带载能力太弱。我们需要专门的文本搜索引擎...
  • 对于数据库查询,主键和索引往往是加速搜索的利器。而对于文本搜索, 模糊搜索,全文检索,MySQL的MyISAM引擎虽然支持,但是性能往往不能达到生产的需求, 或者说服务带载能力太弱。 我们需要专门的文本搜索引擎,...
  • public function onlineplayersource() {  $res = $_POST['aoData'];  $sEcho = 0;  $iDisplayStart = 0; // 起始索引  $iDisplayLength = 0;//分页长度  $jsonarray= json_decode($res) ;  $...
  • 为什么你写的sql查询慢?为什么你建的索引常失效?通过本篇内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义。助你了解索引,分析索引,使用索引,...
  • 引言对于数据库查询,主键和索引往往是加速搜索的利器。而对于文本搜索, 模糊搜索,全文检索,MySQL的MyISAM引擎虽然支持,但是性能往往不能达到生产的需求, 或者说服务带载能力太弱。我们需要专门的文本搜索引擎...
  • 前言为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义。助你了解索引,分析索引,使用索引...
  • 比如可以从慢查询中找出哪类sql执行比较频繁且执行时间比较久、扫描的行数也比较大,可以针对这类sql进行优化(如优化sql、建立相关索引等)一、配置开启慢查询修改配置文件my.cnf,在[mysqld]下的下方加入如下代码,...
  • laravel雄辩的角度启发类型和索引的Elasticsearch数据模型。 通过简单的工匠控制台命令可以自由创建,删除,映射和重新索引。 流明框架支持。 基于本机php和composer的应用程序支持。 可用作驱动程序。 同时...
  • 小心 laravel 模型的 Soft Delete

    千次阅读 2020-07-03 21:03:55
    公司系统中一个简单的 SQL 查询却花费了近 3 秒的时间,语句大致为: SELECT slug FROM products WHERE id IN (id1, id2, ...) AND deleted_at IS NULL; 其中,id 是 PRIMARY KEY,deleted_at 记录删除时间...
  • 4 建立索引 5 curl 请求  laravel es 学习 可以参考 http://laravelacademy.org/post/3781.html 该提供的只是简单的查询 ,如果想复杂 请参考 https://www.elastic.co/guide/en/elasticsearch/guide/2.x
  • Redis相关操作(laravel)

    2020-06-01 15:48:04
    select 1 //选择数据库,redis的数据库索引默认为 0-15 keys * //查询所有 key flushdb //删除当前数据库中的所有 key exists key //测试指定的key是否存在,若存在返回整型的1,否则返回0 set name...
  • 探险者 Laravel Scout的下一代Elasticsearch驱动程序,具有Elasticsearch的查询功能。 安装 通过作曲家 composer require jeroen-g/explorer 您将需要配置文件来定义索引: ...同样不要忘记遵循的,并在您的Laravel ...
  • 功能 功能清单: 高性能无限级分类; 众筹商品管理; 众筹商品下单逻辑; 众筹商品结束逻辑; 使用分期付款支付订单; 计算分期付款逾期费;...相似商品查询;...Elasticsearch 的索引迁移;...Laravel Shop Advan...
  • ZCARD key获取有序集合的成员数,ZRANGE key start stop [WITHSCORES]通过索引进行查询的方式,如不通过时间去筛选,直接用索引进行分页是最好的,功能中需要时间筛选,这里只能对查询出来的数据进行手动切割分页 ...
  • 一个常见的问题是偏移量很大,比如查询使用了LIMIT 10000,20 ,它就会产生10020行数据,并且丢失掉前10000行。 一个提高效率的简单技巧就是在覆盖索引上进行偏移,而不是全行数据进行偏移。可以讲从覆盖索引上提取...
  • /** * 批量删除 * 注:1.建议使用异步操作 2.设置响应时间和阻塞时间 * * @param string $table 需要操作表 ... * @param string $where 查询条件 如:'id>1000' * @param string $field 索引的字段 默认id ...
  • $category = Category::all()->...二维数组{ 一维数组}foreach($category as $value) 此处$value的值为字段的值,索引为自增的数字$category为二维数组,$value为一维数组,通过$value['索引'...
  • 最近做一个新需求,用户发布了动态,前台需要查询,为了用户读取信息响应速度更快(MySQL很难实现或者说实现起来很慢),所以在用户动态发布成功后,利用消息机制异步构建 redis缓存 和 elasticsearch索引 。...
  • 在我们的查询中,可以通过 explain 查看 sql,如果查询语句走索引,那么 mysql 会将查询到的行锁住,如果查询语句不走索引,这时候就很危险,mysql 会将整个表锁住,所以这块没有处理好会非常危险。mysql 的悲观锁有...
  • delete()方法是实例方法,需要查询到相应的数据并通过模型实例调用 destroy()方法可以直接调用,通过索引删除记录 举个例子: 1 2 3 4 5 6 7 8 9 10 11 12 ...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

laravel索引查询