このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/169
#   
#  Oracleについてです。 
#   
#  テーブル1 
#   列A(PK) 
#   列B 
#   列C 
#   列D 
#   
#  があり、列B、列C、列Dの複合INDEXが1つ設定されています。 
#   
#  列B+列C+ 列Dで結合した列を 
#  複数の値を条件に検索する必要があり、 
#   
#  WHERE 列B||列C||列D IN ('XX','XX','XX') 
#   
#  でとして検索しているのですが、 
#  これではINDEXを使用してくれず、 
#  検索が非常に遅くなってしまっています。 
#  (テーブル1は200万件程度あります。) 
#   
#  テーブル構成は変更できず、INDEXまたは 
#  SQLで解決する必要があるのですが、 
#  何か検索を向上させる方法がありますでしょうか。 
# 
# 

'列B||列C||列D IN (検索値ならび)'(_検索値ならび,_値,_A,_B,_C,_D) :-
テーブル1(_A,_B,_C,_D), 
'値が_B,_C,_Dのどれかと適合'(_検索値ならび,_値,_B,_C,_D).

'値が_B,_C,_Dのどれかと適合'(_検索値ならび,_値,_B,_C,_D) :-
member(_値,_検索値ならび),
member(_値,[_B,_C,_D]).