[Seasar-user:11051] Re: s2dao 大規模テーブルでselect count(*) 文が非常に時間がかかる

kubo [E-MAIL ADDRESS DELETED]
2007年 10月 17日 (水) 10:29:23 JST


久保です。

> s2daoのパフォーマンスについて質問があります。
> 
> MySQLで 700万件程度の表を作成して s2daoで次の文から
> 行数を取得しています。
> 
> TableDao_getNumberOfRows.sql の内容(1行)
> select count(*) from table
> 
> mysqlコマンドから実行すると主キーのインデックスが
> きいていて一瞬なのですが、s2daoの呼び出しでは 6秒近くかかってしまいます。
> (全表検索をしている気がします。(確認する方法はわかりません))

前提として、利用しているのは、MyISAMでしょうか、InnoDBでしょうか?

InnoDBって、select count(*)はHINT句などで明示的にインデックスを
指定しないと遅いと記憶していたのですが、逆にmysqlコマンドからだと
速いというのが不思議な感じです。

まずやることは、中村(taedium)さんが既に言われてる通りなのですが、
以下のあたりも参考になるかもしれませんので紹介しておきます。

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
> InnoDB does not keep an internal count of rows in a table.
> To process a SELECT COUNT(*) FROM t statement, 
> InnoDB must scan an index of the table,






Seasar-user メーリングリストの案内