cakePHPのmodelでFORCE INDEXを使用する方法

March 10, 2012,
tags: cakephp force index mysql php


このエントリーをはてなブックマークに追加

なんかうまくINDEXが使用されない箇所があって、たまにFORCE INDEXが使いたくなる事ってあると思います。
cakePHPだと、FORCE INDEXを書く方法が無いように見えますが、意外と簡単にFORCE INDEXを書く事ができます。

基本的にテーブル名の後ろに文字列入れられればいいので、実はjoinsに記載していまうのがいいんです。
最初はAppModelいじったり、DataSorce拡張しようとか考えましたが、ここはシンプルな方法で行くのが良いのでjoinsで書く事にしました。

書き方

<?php
$this->Hoge->find('all',array(
    'conditions' => array(
        'id' => array(1,2,3,4)
    ),
    'fields'  => array(
        'id','name'
    ),
    'joins' => array('FORCE INDEX(PRIMARY)'),
));

生成されたクエリみてみると普通に実行されていました。

SELECT `Hoge`.`id`, `Hoge`.`name` FROM hoges AS Hoge FORCE INDEX(PRIMARY) WHERE `Hoge`.`id` IN ( 1,2,3,4 );

ちなみにUSE INDEXもjoinsキーのなかで書く事ができます。(って言わなくてもわかるか…w

まあEXPLAIN使って調査して、使われるはずなのにINDEX使われなかったりしたら、FORCEかUSEをjoinsの部分に書いてあげれば問題ないとおもいます。

comments powered by Disqus