DISTINCT使うよりは、EXISTS使った方が早くなりますよね?
ぶっちゃ、管理人的には時と場合によってDISTINCTも
使えるとは思うのですが、暗黙のソートがある分やっぱりEXISTSを使った方がいいですね。
ここでいうDISTINCTの暗黙のソートとは、条件に一致する行を取り出して
その後、暗黙のソート処理を行って重複行を削除するみたいです。
以後、その繰り返し。。それは重たくなりますね。
ただCakePHPでEXISTSをどうやって使えばいいのか、悩みどころです。
フレームワークというのはこういう時にやっかいだなと感じちゃいます。
かといって、該当箇所だけquery()で直SQL書くのもなんだかなーと。
で、いろいろ調べていくとありました。
前提条件
CakePHP1.3
Postgres8.1
ようはconditionsの中にぶち込んでしまえ論です。
このサンプルはあまり意味がないですが一応。。
Columnテーブルに複数のColumnInfoテーブルが紐付いておりColumn.idにて重複行削除。
※Column.idが主キー
※ColumnInfo.column_idが外部キー
$options = array(); $options['conditions'] = array( 'SELECT * FROM column_infos AS ColumnInfo WHERE Column.id = ColumnInfo.column_id' ); $res = $this->Column->find('all', $options);
$resが思い通りの値になったかなと思います。