[前][次][番号順一覧][スレッド一覧]

mysql:15766

From: ram <ram <ram@xxxxxxxxxx>>
Date: Thu, 26 Apr 2012 15:46:29 +0900
Subject: [mysql 15766] Re: index ヒントの書き方

中川様 コメント有難うございます。

何人もの方々からアドバイスを頂きまして恐縮です。

where npdt >= #from_ymd# and npdt < #to_ymd# and sycd = #sycd#
where npdate >= '20111001' and npdate < '20111031' and sycd = '06081'
というように当初は実行していましたが、

現在は、日付のうち、yyyymmddを分割して別の列にし、
インデックスをその列に付け替えて、
where sycd = '06081' and npdate_ym >= '201110'
のように与えています。

この状態で、USE INDEX (idx1)と付けてEXPLAINと実行したところ、
id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1    SIMPLE    t@nippod    ref    idx1    idx1    29    const,const    118    Using where
と出ました。

constという文字が出ていますので、これで高速化されているということなのでしょうか?

テーブルは 列名を一部省略していましたが、
実テーブルは以下のようになっています。

Table    Create Table
t@nippod    
CREATE TABLE `t@nippod` (\n
  `sycd` char(5) CHARACTER SET sjis NOT NULL DEFAULT '',\n
  `npdate` char(8) CHARACTER SET sjis NOT NULL DEFAULT '',\n
  `gyono` int(11) NOT NULL DEFAULT '0',\n
  `tkcd` char(5) CHARACTER SET sjis DEFAULT NULL,\n
  `tksc` char(4) CHARACTER SET sjis DEFAULT NULL,\n
  `vscd` char(5) CHARACTER SET sjis DEFAULT NULL,\n
  `tknm` varchar(40) CHARACTER SET cp932 DEFAULT NULL,\n
  `tkkb` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `jskb` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vssttime` time DEFAULT NULL,\n
  `vsedtime` time DEFAULT NULL,\n
  `vskb1` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vskb2` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vskb3` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vskb4` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vskb5` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vskb6` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vskb7` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `vsmemo` varchar(500) CHARACTER SET cp932 DEFAULT NULL,\n
  `vscomm` varchar(500) CHARACTER SET cp932 DEFAULT NULL,\n
  `chkflg` varchar(1) CHARACTER SET sjis DEFAULT NULL,\n
  `chnm` varchar(20) CHARACTER SET cp932 DEFAULT NULL,\n
  `npdate_ym` char(6) DEFAULT NULL,\n
  `npdate_d` char(2) DEFAULT NULL,\n
  KEY `idx1` (`sycd`,`npdate_ym`,`tknm`)\n
) ENGINE=InnoDB DEFAULT CHARSET=utf8

申し訳ないことに、同時並行で替えているので、効果の切り分けが判らなくなってしまいましたが、
実テーブルのインデックス追加や列追加はまだ行っていないので、
実データでの効果はまだ測定できていません。

Where句とGroup句のキーに出現する列をインデックスに含めること、
使用するインデックスを明記すること、
Where句を減らすこと、
が手段として効果があるということですね。

処理時間を計測する時、COLDFUSIONというアプリケーションサーバーのデバッグモードでSQL実行時間が表示されるので
それを目安にしているのですが、確かに かとうさんの仰る通り、サーバー上のコンソールで、SQLを実行すると、
瞬時に処理が終わり、ストレスを感じる速度では無いです。

これは、Mysqlの問題、というよりも、COLDFUSIONないし、JDBCの問題、ということだとしたら、誠にお騒がせな質問で
皆さまのお手を煩わせてしまい、申し訳ありません。

-------------------------------------------------------
初穂 太郎

(2012/04/26 11:56), 中川 貴 wrote:

>> where npdt >= #from_ymd# and npdt < #to_ymd# and sycd = #sycd#
> ここの「#from_ymd#」「#to_ymd#」「#sycd#」が気になっているのですが、具体的にはどんな値を渡しているのでしょうか。
> あと、nippoテーブルの「show create table」の結果も教えていただけませんか。
>
> ****************************************
> コープ情報システム株式会社
> 運用事業部
> コーププラザサービスデスクグループ
> 中川 貴
> 175-0094
> 東京都渋谷区渋谷3-29-8 コーププラザ5F
> TEL 03-5778-8010
> E-MAIL takashi.nakagawa@xxxxxxxxxx
> ****************************************
>
> (2012/04/25 23:27), nora1962@xxxxxxxxxx wrote:
>> 中川です。自宅からです。
>> INDEXヒントの書き方間違えていました。
>> FROM nippo USE INDEX ( インデックス名 )
>> でした。
>>



[前][次][番号順一覧][スレッド一覧]

     15763 2012-04-25 23:27 [<nora1962@xxxxxxxxxx] index ヒントの書き方                    
     15764 2012-04-26 11:56 ┗[中川 貴 <takashi.nak]                                       
->   15766 2012-04-26 15:46  ┗[ram <ram@xxxxxxxxxx>]                                     
     15767 2012-04-26 20:40   ┗[<nora1962@xxxxxxxxxx] Re: _[mysql_15766]_Re:_index_ヒントの書き方