坂根 有
sakan****@skygr*****
2007年 3月 28日 (水) 15:01:35 JST
お世話になります。坂根と申します。 先日、末長様へ個人的にメールさせて頂きましたが MLのほうで報告をすればサポートできるかもというこでしたので 期待を込めてメールさせていただきます。 何点か不具合と思われる現象がありました。 動作確認環境は以下の通りです。 環境1 mysql-5.0.37 + tritonn-1.0.0.mysql-5.0.37.senna-1.0.2 Senna 1.02 MeCab 環境2 mysql-4.1.22 + 4.122用MySQLバインディングパッチ(末長様に頂きました) Senna 1.03 MeCab 使用テーブル CREATE TABLE `blog_items` ( `blogid` int(11) NOT NULL default '0', `itemid` int(11) NOT NULL default '0', `commentid` int(11) NOT NULL default '0', `title` varchar(160) NOT NULL default '', `body` text NOT NULL, `more` text NOT NULL, `blog` int(11) NOT NULL default '0', `author` varchar(60) NOT NULL default '', `wdate` date NOT NULL default '0000-00-00', `wtime` datetime NOT NULL default '0000-00-00 00:00:00', `closed` tinyint(2) NOT NULL default '0', `draft` tinyint(2) NOT NULL default '0', `catid` int(11) NOT NULL default '0', `search` text NOT NULL, PRIMARY KEY (`blogid`,`itemid`,`commentid`), KEY `date_idx` (`wdate`), KEY `wtime_idx` (`wtime`), FULLTEXT KEY `author_full_idx` (`author`), FULLTEXT KEY `search_full_idx` (`search`) ) ENGINE=MyISAM DEFAULT CHARSET=ujis; 一回FULLTEXT INDEXは消して ALTER TABLE blog_items ADD FULLTEXT author_full_idx USING NGRAM (author), ADD FULLTEXT search_full_idx (search); で作り直しました。 CREATE TABLE `master_blog` ( `blog_id` int(11) NOT NULL auto_increment, `blog_name` varchar(100) NOT NULL default '', `blog_dir` varchar(20) NOT NULL default '', `blog_dbname` varchar(20) NOT NULL default '', `blog_url` varchar(100) NOT NULL default '', `search_flag` tinyint(4) NOT NULL default '0', `sum_flag` int(11) NOT NULL default '1', `access_group` text NOT NULL, `partner_flg` tinyint(4) NOT NULL default '0', `daredemo_flg` tinyint(4) NOT NULL default '0', `status` varchar(20) NOT NULL default '', PRIMARY KEY (`blog_id`) ) ENGINE=MyISAM DEFAULT CHARSET=ujis PACK_KEYS=0 AUTO_INCREMENT=231 ; データはblog_itemsには35万レコード,master_blogには231レコードは行っております。 まず以下の比較的簡単なクエリで4.1環境では0.2秒で終わるクエリが 5.0環境では20秒近くかかり極端にパフォーマンスが落ちました。 実行した SQL: SELECT SQL_CALC_FOUND_ROWS * FROM blog_items LEFT JOIN master_blog ON blog_items.blogid = master_blog.blog_id WHERE blog_items.blogid = 5 LIMIT 0 , 100 4.1環境でのEXPLAIN結果 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE blog_items ref PRIMARY PRIMARY 4 const 28378 Using where 1 SIMPLE master_blog eq_ref PRIMARY PRIMARY 4 bcounter.blog_items.blogid 1 5.0環境でのEXPLAIN結果 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE blog_items ref PRIMARY PRIMARY 4 const 36801 1 SIMPLE master_blog const PRIMARY PRIMARY 4 const 1 パッチを当てていないMYSQL5.0でも検証しても 起こるためMYSQL5.0の問題と思っております。 そこで5.0ではパフォーマンスがでないため 末長様にMYSQL4.1.22用のパッチを頂きました。 MYSQL4.1では全体的にパフォーマンスもよく検索できておりましたが バグと思われる挙動があり困っております。(MYSQL5.0+Tritonn環境でも発生します) ------------------------------------------------------------------------------------------ 1点目 0件目からのLimitでない場合結果が取得できない。 ------------------------------------------------------------------------------------------ 以下のクエリは正常に結果が取得できます。 SELECT * FROM blog_items LEFT JOIN master_blog ON blog_items.blogid = master_blog.blog_id WHERE MATCH (search) AGAINST ('test') AND master_blog.search_flag =1 LIMIT 0,10 ところが以下のようにLIMITで0件目からの取得でない場合結果が空になります。(カウントでは200件あります) SELECT * FROM blog_items LEFT JOIN master_blog ON blog_items.blogid = master_blog.blog_id WHERE MATCH (search) AGAINST ('test') AND master_blog.search_flag =1 LIMIT 10,10 ------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------ 2点目 SQL_CALC_FOUND_ROWSで総件数を取得する場合limitの値で総件数が変動します。 ------------------------------------------------------------------------------------------ SELECT SQL_CALC_FOUND_ROWS * FROM blog_items WHERE MATCH (search) AGAINST ('test') AND (master_blog.search_flag = 1) limit 120,10 と SELECT SQL_CALC_FOUND_ROWS * FROM blog_items WHERE MATCH (search) AGAINST ('test') AND (master_blog.search_flag = 1) limit 10,10 では違う件数になってしまいます。 ------------------------------------------------------------------------------------------ 2indパッチを当てずに検証しましたところ発生いたしませんでした。 現状2indパッチを使用しない形で実運用に組み込もうと考えておりますが 今後のことが少々不安ですのでTritonnプロジェクトでの 4.1系の開発を要望としてあげさせていただきます。 以上よろしくお願いいたします。