スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GGA・拡張SQL記述方法(4)

3回にわたって簡単なGGA拡張SQLの記述方法を並べてみましたが、こういうやり方ならば案外楽に作れる筈です。とは言え触れていない注意事項が数件ありましたので、一応列挙。


・ 同一SQL内に複数のcount条件は置かない

( ( (SELECT COUNT(*) ~条件A~) >= 1 ) or ( (SELECT COUNT(*) ~条件B~) = 1 ) )

こういう感じにはしない方が良いかと思います。理論上は大丈夫なのですが、大体が検索段階で異様なほど時間が掛かって処理落ちします。それであれば、別個に作成した上で保存しておいた方が良いかと。ただ、その分お気に入りの数が膨大に増加しますが…。おかげで私のお気に入りの数は軽く400を超える羽目になっています。


・ or条件の中身が長くなるSQLは分割した方が良い

これも実践上での注意事項です。例えばあるコースで未勝利戦ならば京都1800で上がり35.0以内、500万なら京都1600で上がり34.5以内…と言った様な複雑な条件を作成するとなると、
(未勝利戦で京都1800、上がり35.0以内) or (500万で京都1600、上がり34.5以内) or …
というようにor条件の中身が相当長くなります。これを実行しようとすると検索時間が掛かり、処理落ち必須になりますのでそういう条件ならば分割してあげた方が無難です。

一応or条件の中身が2~3個程度ならば利用に耐えうるとは思いますが、その辺りは自身のPCスペックと相談してみてください。


・ 使わない表は結合しない(方が良い)

DBの話をすると、実は処理時間が一番掛かるのは検索部分ではなく、表の合体(結合)になることが殆どです。サンプルとして紹介したSQLは3つの表を結合させていますが、検索条件次第では使わない表が出てくるかもしれません。その場合は削ってしまった方が無難です。実例は下記に。


(SELECT COUNT(*) FROM D番組データ AS D_B INNER JOIN (D競走馬データ AS D_K INNER JOIN D成績データ AS D_S ON D_K.競走成績キー = D_S.競走成績キー) ON D_B.レースキー = D_K.レースキー WHERE (D_K.血統登録番号=D競走馬データ.血統登録番号) AND (D_B.年月日 < D番組データ.年月日) and (left(D_B.レースキー,2) = '01' OR left(D_B.レースキー,2) = '02') ) = 0

このSQLではD成績データ(D_S)が使われていませんので削除します。ただし削除する場合は、WHEREの前部分でD_S表が絡んでいる部分を全削除する必要があります。ということで削除したSQLが下記。


(SELECT COUNT(*) FROM D番組データ AS D_B INNER JOIN D競走馬データ AS D_K ON D_B.レースキー = D_K.レースキー WHERE (D_K.血統登録番号 = D競走馬データ.血統登録番号) AND (D_B.年月日 < D番組データ.年月日) and (left(D_B.レースキー,2) = '01' OR left(D_B.レースキー,2) = '02') ) = 0


これに関しては無理にやる必要はないでしょう。ただスペックの問題があったり、もしくは簡単なSQL知識のある方は是非。


次回はすぐ使えるサンプルご紹介を。
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。