• 締切済み

【SQLite】処理遅延のボトルネック

SQLite+PHPを利用してプログラムを組んでいます。 特定のテーブルのみ処理が遅くなる事象が発生します。 同型のテーブルが5つありまして、その5つのテーブルより 該当する組み合わせを抽出致しております。 例えば ) ピッチャー、キャッチャー、ファースト、セカンド、サードのテーブルに対して登録選手のデータとして各200名程度の行で名前、年齢、性別、身長、体重、打率の列を持っています。 このデータベースの中から、男性で合計年齢が100歳以下になる組み合わせを抽出しようとしております。 この時に、 --SELECT1------------------------ SELECT (略) WHERE ピッチャー.年齢 + キャッチャー.年齢 + ファースト.年齢 + セカンド.年齢 + サード.年齢 > 100 LIMIT 10 --------------------------------- としたところ、180000以上応答がありませんでした。 そこで、以下のように分解したところ、 --SELECT2------------------------ SELECT (略) WHERE ピッチャー.年齢 + キャッチャー.年齢 + ファースト.年齢 > 100 LIMIT 10 --SELECT3------------------------ SELECT (略) WHERE ピッチャー.年齢 + キャッチャー.年齢 + セカンド.年齢 > 100 LIMIT 10 ---------------------------------- 上記SELECT1の場合、処理時間は600ms程度で応答が返りました。 しかし、SELECT2では、120000msかかってしまいます。 なぜ、このような結果になるのか全く解りません。 些細な事でも良いので解決の糸口を教えてください。 よろしくお願いします。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

質問文を見る限りだと、SQL文が直積の形になっていそうな感じ。 そうだとすると、200の5乗=3200億件くらい検索してるからのように思えます。 外してるかな?

himemoco77
質問者

補足

アドバイスありがとうございます。 直積で計算しているため、処理が尋常じゃないのは心得ております。 しかし、質問文SELECT2のケースで600msで応答が返るため、 直積にした場合でも2000msぐらいで応答してくれないかな?と期待しています。 直積で検索した場合、LIMITを書いても3200億処理してしまうのでしょうか? 上から順に10個見つけたらスパっと終わると思っているのですが。