mysql:15226
From: 宮田 昌紀 <宮田 昌紀 <moyata@xxxxxxxxxx>>
Date: Thu, 25 Mar 2010 13:20:30 +0900
Subject: [mysql 15226] Re: レコードの存在チェック
宮田と申します。 > count(*) を行った場合、テーブルスキャンが発生するため、データ量によっては結果取得に時間を要します。 誤解される場合があると思いましたので、横からフォロー致します。 一般的にはテーブルスキャンは全表検索(全行検索)の意味で使われます。 よって、索引が設定された項目を条件に指定したcount(*)ではテーブルスキャンは 行われません。 ご案内頂いたURLでは、InnoDBの主キーがクラスタインデックスであり、 クラスタインデックスを走査する事をテーブルスキャンと表記している 場合があるようですが、一部の行のみを走査する場合にテーブルスキャンと 表記するのは誤用だと思います。 count(*)ではなくcount(カラム名)とするのは、条件との関連で使用できる 索引がなく、本来の意味のテーブルスキャン(=全表検索)が行われる際に、 主キーではない索引でテーブルスキャンを行わせたい場合に使います。 (その方が高速に動作する場合。行サイズの関連で大抵はそうなると思います) > From: Akio Imai <suzuro2045@xxxxxxxxxx> > Subject: [mysql 15223] Re: [mysql 15221] Re: レコードの存在チェック > Date: 2010/03/25 12:26 > > 今井と申します。 > > もう既に解決したような感じですが > count(*) を行った場合、テーブルスキャンが発生するため、データ量によっては結果取得に時間を要します。 > > InnoDB における count() の注意事項と高速化手法に関して書かれている記事があるので、以下を一読してみるだけでも面白いですよ > http://nippondanji.blogspot.com/2010/03/innodbcount.html
15219 2010-03-25 11:05 [Hiroshi Hashibata <h] レコードの存在チェック 15220 2010-03-25 11:53 ┗[<sydney@xxxxxxxxxx> ] 15221 2010-03-25 12:15 ┗[Hiroshi Hashibata <h] 15222 2010-03-25 12:25 ┣[Mikiya Okuno <Mikiya] 15223 2010-03-25 12:26 ┣[Akio Imai <suzuro204] Re: [mysql 15221] Re: レコードの存在チェック 15224 2010-03-25 13:09 ┃┣[Mikiya Okuno <Mikiya] Re: レコードの存在チェック -> 15226 2010-03-25 13:20 ┃┗[宮田 昌紀 <moyata@xx] Re: レコードの存在チェック 15227 2010-03-25 14:39 ┃ ┗[Akio Imai <suzuro204] Re: [mysql 15226] Re: レコードの存在チェック 15228 2010-03-25 17:02 ┃ ┗["Tadayuki Abraham HA] MySQLの公共システムへの利用率について 15225 2010-03-25 13:12 ┗["EBIHARA, Yuichiro" ]