[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 メーリングリストの案内