Inserindo índices automaticamente nos relacionamentos

Durante o desenvolvimento de uma aplicação legada, percebi que muitos gastos do banco de dados era devido a falta de índices nas tabelas do banco de dados.
Para não criar todos os índices na mão resolvi desenvolver um shell para o cakephp que os insira sempre que um relacionamento for detectado.
O script pode ser encontrado aqui no meu github.
Segue o código para quem não trabalha com git:

<?php
App::import('Model');
class InsertIndexShell extends Shell {
public function main() {
$models = $this->getModels();
$this->insertIndexes($models);
}
 
private function getModels()
{
return App::objects('model');
}
 
private function insertIndexes($models)
{
foreach($models as $model)
{
App::import('Model',$model);
$this->{$model} = new $model();
$this->{$model}->recursive = -1;
$this->fieldsToIndex($this->{$model});
}
}
 
private function fieldsToIndex($modelObj)
{
foreach($modelObj->belongsTo as $relacionamento)
{
$field = $modelObj->_schema[$relacionamento['foreignKey']];
if(!empty($field) && !array_key_exists('key',$field))
{
if($modelObj->query("ALTER TABLE `{$modelObj->tablePrefix}{$modelObj->table}` ADD INDEX (`{$relacionamento['foreignKey']}`)"))
{
$this->out("Indice {$relacionamento['foreignKey']} adicionado em {$modelObj->table}");
}
else
{
$this->out("impossivel adicionar indice {$relacionamento['foreignKey']} em {$modelObj->table}");
}
}
}
}
}
?>

Obs1.: Está específico para o MySQL.
Obs2.: Na próxima versão verificarei as colunas que estão sendo utilizadas nos conditions.