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_ヒントの書き方