我认为这会帮助你:
http://cakephp.1045679.n5.nabble.com/Using-USE-INDEX-or-FORCE-INDEX-in-Model-gt-find-amp-relationships-td3281552.html#a3300205
“1- 创建我自己的数据源——(在我的例子中扩展 DboMysql)数据源有两个任务:
它覆盖 read 方法并检查模型是否设置了 useIndex 字段
if (!empty($model->useIndex)) {
$this->useIndex = $model->useIndex;
}
return parent::read($model, $queryData);
它会覆盖 renderStatement 方法,如果设置了 $model->useIndex 字段,则在 select 语句中的表别名之后添加其值。
if (strtolower($type) == 'select' && !empty($this->useIndex)) {
$res = "SELECT {$fields} FROM {$table} {$alias} {$this->useIndex} {$joins} {$conditions} {$group} {$order} {$limit}";
} else {
$res = parent::renderStatement($type, $data);
}
$this->useIndex = null;
return $res;
2- 设置模型字段 whitch 包含使用索引、强制索引或忽略索引的 sql 部分
例如在控制器中:
$this->Task->useIndex = 'IGNORE INDEX(ind_usr_id)';
$this->paginate = array(
'fields' => array('Task.id', 'Task.name','User.id', 'User.name'),
'order' => 'Task.id',
'limit' => 10
);
$this->paginate('Task');
"