Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
49 / 114 ツリー <前へ | 次へ>

〔581〕ACFinder 070318版 kabe (07/03/18 22:36)

〔621〕Re:070323test版 Hidemi Oya (07/03/26 23:16)
〔625〕Re:070323test版 kabe (07/03/27 9:40)
〔627〕Re:070323test版 kabe (07/03/27 21:13)
〔628〕Re:070323test版 kabe (07/03/27 21:15)

〔621〕Re:070323test版
 Hidemi Oya WEB  (07/03/26 23:16)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 [#619] のクエリ2ですが、ACFinder 起動時に次のようなテンポラリテーブルを作成すると、さらに高速化が可能です。作物に「ブロッコリー,あぶらな科野菜,野菜類」を指定した場合、自宅マシンで [#619] のクエリ2が初回 2.3 秒ですが、下記のクエリなら初回 1.8 秒です。
 なお、テンポラリテーブルの作成は自宅マシンで 1.3 秒、パーマネントテーブルとして作成しても同じ時間でした。この程度なら ACFinder 起動時にテンポラリテーブルとして毎回作成しても苦にはならないですが、薬剤タブでも使うなら、データ更新時にパーマネントテーブルとして作成した方が良いかもしれません。

--ACFinder 起動時
CREATE TEMP TABLE tsTekiyo (...);
CREATE TEMP VIEW IF NOT EXISTS tvTekiyo AS
SELECT ... FROM tsTekiyo;
CREATE TEMP VIEW IF NOT EXISTS tvTsushoTekiyo AS
SELECT ... FROM tsTekiyo;
--追加テンポラリテーブル作成
CREATE TEMP TABLE tBangoSaku AS
SELECT DISTINCT bango, sakumotsu FROM tekiyo;

--作物タブ用クエリ
CREATE TEMP TABLE tTmp AS SELECT bango FROM tBangoSaku WHERE 作物検索条件;
DROP TABLE IF EXISTS tSaku;
CREATE TEMP TABLE tSaku AS SELECT * FROM tekiyo
WHERE bango IN tTmp AND 作物検索条件;
DROP TABLE tTmp;
DROP TABLE IF EXISTS tsTekiyo;
--(1) 近接作物指定無し
CREATE TEMP TABLE tsTekiyo AS SELECT * FROM tSaku;
/*
--(2) 近接作物指定有り
CREATE TEMP TABLE tTmp AS SELECT DISTINCT bango FROM tSaku;
CREATE TEMP TABLE tsTekiyo AS SELECT * FROM tekiyo
WHERE (bango IN tTmp) AND ((作物検索条件) OR (近接作物検索条件));
DROP TABLE tTmp;
*/
--(3) 適用表示
SELECT * FROM tvTsushoTekiyo;

〔625〕Re:070323test版
 kabe  (07/03/27 9:40)

引用なし
   >Hidemi Oyaさん

kabe です。

作物名そのものを REGEXP で検索する時間をどれくらい短縮できるかですね。
この考え方をさらに進めると、次の方法が効果的と思われます。

作物名を単一化して作物コードと作物名のみのテーブルを作成する。
m_tekiyo テーブルに作物コードを付加して、作物名テーブルから作物コードを更新する。
作物検索は最初に作物名テーブルで検索して、作物コードを抽出してから適用を検索する。
これだと REGEXP での作物名検索は現状で 1100レコード程度に対して行えば済むのでかなり高速化が期待できそうです。

作物コードをデータ更新時に同時に作成することになるので、データ更新時間がどれくらい増えるかですね。

〔627〕Re:070323test版
 kabe  (07/03/27 21:13)

引用なし
   kabe です。

>作物コードをデータ更新時に同時に作成することになるので、データ更新時間がどれくらい増えるかですね。
実験中です。
m_kihon の9万行のレコードの UPDATE 処理を加えた場合のデータ更新時間は、私の環境で今まで 50秒程度が70秒以上かかります。
UPDATE m_tekiyo SET idsaku = (
SELECT idsaku FROM m_sakumotsu
WHERE m_sakumotsu.sakumotsu m_tekiyo.sakumotsu)
m_sakumotsu の sakumotsu と m_tekiyoのsakumotsu にインデックス設定を行った上です。

〔628〕Re:070323test版
 kabe  (07/03/27 21:15)

引用なし
   kabe です。

>m_kihon の9万行のレコードの
訂正↑m_tekiyo です。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
49 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.