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

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



黒瀬です。

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
========================