[groonga-dev,00922] Re: select count(*) で正しい件数がとれない

Back to archive index

Kouhei Sutou kou****@clear*****
2012年 6月 4日 (月) 19:47:10 JST


須藤です。

In <CABp+****@mail*****>
  "[groonga-dev,00916] select count(*) で正しい件数がとれない" on Sun, 3 Jun 2012 13:59:39 +0900,
  Jun Nishikawa <topaz****@m0n0m*****> wrote:

> mroonga 導入の為検証をしているのですが、
> 特定の条件で select count(*) の値が必ずずれます。
> 
> この現象は下記チケットが close すれば治るという理解でよろしいでしょうか?
> http://redmine.groonga.org/issues/1318

あ、いえ、このチケットの問題は修正済みです。
(私が変更の詳細をまだ確認していないのでcloseになっていない
だけです。)

> 環境は以下の通りです。
> $ facter lsbdistdescription
> Ubuntu 12.04 LTS
> $ aptitude show mysql-server-mroonga mysql-server | grep Version
> Version: 2.03-1
> Version: 5.5.22-0ubuntu1
> 以下、再現手順です。

ありがとうございます!
chroot環境下ですが、試してみました!
が、再現しませんでした。。。

  # facter lsbdistdescription
  Ubuntu 12.04 LTS
  # LANG=C aptitude show mysql-server-mroonga mysql-server | grep Version
  Version: 2.03-1
  Version: 5.5.22-0ubuntu1

terminal 1:

  mysql> CREATE TABLE `test` (   `id` int(11) NOT NULL,   `culture` varchar(7) COLLATE utf8_unicode_ci NOT NULL,   `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   `description` text COLLATE utf8_unicode_ci,   `tags` text COLLATE utf8_unicode_ci,   PRIMARY KEY (`id`,`culture`) USING BTREE,   FULLTEXT KEY `name_description` (`name`,`description`),   FULLTEXT KEY `tags` (`tags`) ) ENGINE=mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='engine "innodb"';
  Query OK, 0 rows affected, 2 warnings (0.43 sec)

  mysql> insert into test values (1, 'ja', 'ワンピース', '1巻', 'ワンピース');
  Query OK, 1 row affected (0.06 sec)

  mysql> insert into test values (1, 'en', 'One Piece', 'Volume 1', 'Manga');
  Query OK, 1 row affected (0.05 sec)

terminal 2:

  mysql> start transaction;
  Query OK, 0 rows affected (0.00 sec)

  mysql> insert into test values (2, 'ja', 'ワンピース', '2巻', 'ワンピース');
  Query OK, 1 row affected (0.00 sec)

terminal 1:
  
  mysql> select count(*) from test WHERE culture='ja' AND MATCH (test.TAGS) AGAINST ('+ワンピース' IN BOOLEAN MODE) AND MATCH (test.NAME, test.DESCRIPTION) AGAINST ('+ ワンピース' IN BOOLEAN MODE);
  +----------+
  | count(*) |
  +----------+
  |        1 |
  +----------+
  1 row in set (0.02 sec)

terminal 2:

  mysql> commit;
  Query OK, 0 rows affected (0.04 sec)

terminal 1:

  mysql> select count(*) from test WHERE culture='ja' AND MATCH (test.TAGS) AGAINST ('+ワンピース' IN BOOLEAN MODE) AND MATCH (test.NAME, test.DESCRIPTION) AGAINST ('+ワンピース' IN BOOLEAN MODE);
  +----------+
  | count(*) |
  +----------+
  |        2 |
  +----------+
  1 row in set (0.00 sec)

  mysql> select * from test;
  +----+---------+-----------------+-------------+-----------------+
  | id | culture | name            | description | tags            |
  +----+---------+-----------------+-------------+-----------------+
  |  1 | en      | One Piece       | Volume 1    | Manga           |
  |  1 | ja      | ワンピース      | 1巻         | ワンピース      |
  |  2 | ja      | ワンピース      | 2巻         | ワンピース      |
  +----+---------+-----------------+-------------+-----------------+
  3 rows in set (0.00 sec)


うーん、何が違うんですかねぇ。。。
念のため、MySQLを再起動してみてもらえますか?


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
プログラミングが好きなソフトウェア開発者を募集中:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
Back to archive index