Re: ACFinderでの作物名コードの扱いについて

このトピックの投稿一覧へ

なし Re: ACFinderでの作物名コードの扱いについて

msg# 1.1.2.1
depth:
3
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 | 投稿日時 2010.10.26 17:52 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
本日午後、FAMIC にお願いメールを出しておきました。どういう返事が来るかは分かりませんし、対応いただけるとしてもいつからになるか分かりません。
ってことで、当面の対策として、m_sakumotsu, m_byochu を更新するまで新たな作物名や病害虫名の選択ができなくても、検索漏れが無いようにする方法を考えてみました。

現在は検索に m_sakumotsu, m_byochu を使用しているため、新しい作物名・病害虫名があると検索漏れが生じます。なので、検索高速化のための作物・病害虫名テーブルは m_tekiyo から別途作成するってのはどうでしょう?

とりあえず、作物名による検索だけ試してみました。まず、m_kihon に作物名インデックスを作り、さらにm_kihon から作物名だけを抽出したテンポラリーテーブルを作成します。実際には、データベース更新時に作物名と病害虫名でインデックスとパーマネントテーブルを作成することになります。
--/d
CREATE INDEX idxSakumotsu ON m_tekiyo (sakumotsu);
CREATE TEMP TABLE tSakumotsu AS SELECT DISTINCT sakumotsu FROM m_tekiyo;


この tSakumotsu を使用して、下記のような検索を行うと、私の環境で3回実行して、検索時間は 0.23~0.25 秒です。
SELECT * FROM tekiyo WHERE sakumotsu IN(SELECT sakumotsu FROM tSakumotsu WHERE sakumotsu REGEXP '(^|、|\()(きゅうり|うり科野菜|野菜(類)?).*?(\)|、|$)' AND sakumotsu NOT REGEXP '\((.*、)?(きゅうり|うり科野菜|野菜(類)?)(、.*)?を除く');


現在の検索方法でも 0.23~0.25 秒だったので、検索速度の低下はありません。
SELECT * FROM tekiyo WHERE idsaku IN(SELECT idsaku FROM m_sakumotsu WHERE sakumotsu REGEXP '(^|、|\()(きゅうり|うり科野菜|野菜(類)?).*?(\)|、|$)' AND sakumotsu NOT REGEXP '\((.*、)?(きゅうり|うり科野菜|野菜(類)?)(、.*)?を除く');


下記のような、初期の検索方法だと 3.30~3.33 秒なので、さすがに作物名テーブルなしの検索には戻れません
SELECT * FROM tekiyo WHERE sakumotsu REGEXP '(^|、|\()(きゅうり|うり科野菜|野菜(類)?).*?(\)|、|$)' AND sakumotsu NOT REGEXP '\((.*、)?(きゅうり|うり科野菜|野菜(類)?)(、.*)?を除く';


この方法なら、既存の作物や病害虫で「○○○(△△を除く)」が追加されただけなら、m_sakumotu, m_byochu を更新する必要がなくなります。全く新たな作物名や病害虫名が追加されることはそれほど多くないので、m_sakumotsu, m_byochu のメインテナンスを簡略化できます。
投票数:2 平均点:5.00

投稿ツリー

  条件検索へ