[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-dev:00783] Re: tbl_tensuの検索について



岩堀です。
おかげさまで解決いたしました。
これまで書いていたコードはPHPがエラーを返すのでシングルクォートを付けていたのですが、今回はなぜかエラーを返さず、すんなり検索してくれていたので、それが検索を遅くしている原因とは気づきませんでした。
ありがとうございました。

2009/04/30 12:48 kurokuro <md81bird@xxxxxxxxxx>:
> 黒瀬です。
>
> On Wed, 29 Apr 2009 16:51:15 +0900
> 岩堀嘉郎 <iwa0385@xxxxxxxxx> wrote:
>
>>初めて投稿するのでこの場がふさわしいのかどうかもわかりませんが、よろしくお願いいたします。
>>tbl_tensuを検索するsqlで
>>select name from tbl_tensu where srycd =160000310 and hospnum=1 and
>>yukoedymd=99999999 and srykbn=60
>>というコード書いたのですが、検索に10秒近くかかってしまいます。
>
> 長嶺さんの指摘のとおり、
> select name from tbl_tensu where srycd ='160000310' and hospnum=1 and
> yukoedymd='99999999' and srykbn='60'
>
> のようにして、srycd/yukoedymd/srykbnの値をシングルクォートで囲めば
> 高速に実行されますが、遅い条件の原因としては主にインデックスが使用されないことに
> あるようです。(文字列変換による影響もあり)
>
>
> □ シングルクォートを付けない場合
> 下記の通り、シーケンシャルスキャン(Seq Scan)になっており、インデックスが使用されていません。
> orca=# explain analyzeselect name from tbl_tensu where srycd =160000310 and hospnum=1 and yukoedymd=99999999 and srykbn=60;
>                                                                       QUERY PLAN
> ---------------------------------------------------------------------------------------------------------------------------------------------------------
>  Seq Scan on tbl_tensu  (cost=0.00..25042.01 rows=1 width=31) (actual time=19.311..337.601 rows=1 loops=1)
>   Filter: (((srycd)::text = '160000310'::text) AND (hospnum = 1::numeric) AND ((yukoedymd)::text = '99999999'::text) AND ((srykbn)::text = '60'::text))
>  Total runtime: 337.633 ms
> (3 rows)
>
>
> □ シングルクォートを付けた場合
> 下記の通り、Index Scanとなっているのでインデックスが使用されており、桁違いに高速です。
> orca=# explain analyze select name from tbl_tensu where srycd ='160000310' and hospnum=1 and yukoedymd='99999999' and srykbn=60;
>                                                            QUERY PLAN
> ----------------------------------------------------------------------------------------------------------------------------------
>  Index Scan using tbl_tensu_primary_key on tbl_tensu  (cost=0.00..4.37 rows=1 width=31) (actual time=0.046..0.049 rows=1 loops=1)
>   Index Cond: ((hospnum = 1::numeric) AND (srycd = '160000310'::bpchar) AND (yukoedymd = '99999999'::bpchar))
>   Filter: ((srykbn)::text = '60'::text)
>  Total runtime: 0.078 ms
> (4 rows)
>
>
> ========================
>   kurokuro / kurose Shushi
>   Email : md81bird@xxxxxxxxxx
> ========================
>
>



-- 

岩堀病院 院長
医学博士 岩堀 嘉郎
915-0066
福井県越前市神明町4−12
TEL:0778-22-0385
FAX:0778-22-9840