(CakePHP, SQLite3) conditionsよりorderの方が速い?

自分のサイトで、下記のような条件でデータを検索する必要がありました。


最終更新の新しい順に取得したい。
ただし、スパムのフラグがついていないものに限る。
"find"のパラメータはこんな感じ。

$data = $this->TagList->find('all', array(
'limit' => 20,
'conditions' => array('spam' => false),
'order' => 'modified DESC'
));
テスト環境では気づきませんでしたが、50万件のデータを検索すると、すんごく遅い…orz
一般的なPHPの実行制限時間である30秒を、軽くオーバーしてしまいます(-_-;)
で、解決策が下記。

$data = $this->TagList->find('all', array(
'limit' => 20,
'order' => array('spam', 'modified DESC')
));
劇的に改善しました。
今回は真偽どちらかしかない"spam"フィールドだからこそ、このような対処ができました。


これまで、負荷や処理時間などは全く気にかけていませんでした。
大量のデータを扱うようになって、はじめてその大切さに気づかされました。
未熟…、未熟…、未熟ぅ…orz