【问题标题】:CakePHP CakeDC search plug-in slow queryCakePHP CakeDC 搜索插件 慢查询
【发布时间】:2014-02-25 08:38:49
【问题描述】:

我不是 CakePHP 或 mySQL 专家,欢迎提出任何建议。

我基本上从 CakeDC 手动复制/粘贴/更改我的字段设置了一个 HABTM 搜索。

宝模【相关】代码:

public $filterArgs = array(
  array('name' => 'makers', 'type' => 'subquery', 'method' => 'findByMaker', 'field' =>    'Treasure.id'));

public function findByMaker($data = array()) {
    $this->MakersTreasure->Behaviors->attach('Containable', array('autoFields' => false));
    $this->MakersTreasure->Behaviors->attach('Search.Searchable');
    $query = $this->MakersTreasure->getQuery('all', array(
        'conditions' => array("Maker.name LIKE '%" . $data['makers'] ."%'"),
        'fields' => array('treasure_id'),
        'contain' => array('Maker')
    ));
    return $query;
}

带有分页器的TreasuresController:

$this->Paginator->settings['conditions'] = $this->Treasure->parseCriteria($this->Prg->parsedParams());
$this->set('treasures', $this->Paginator->paginate());

该数据库包含大约 20,000 个宝藏和大约 2,000 个 Maker - 这对我来说似乎不是很大。

我查看了 COUNT 和 SELECT (with LIMIT) 查询,它们运行缓慢。我想 IN 子句真的要付出代价。关于如何在 CakePHP 中解决这个慢查询的任何想法?

【问题讨论】:

    标签: mysql cakephp pagination


    【解决方案1】:

    啊,一路走来,我对 mySQL 有了更多了解。答案(对我而言):

    索引联结表上的 FK。我想当我更多地了解 mySQL 时,我应该知道这一点。

    对我来说是:

    use oc1;
    alter table makers_treasures add index (maker_id);
    alter table makers_treasures add index (treasure_id);
    

    COUNT 查询现在需要 0.12 秒而不是 3 分钟以上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多