[前][次][番号順一覧][スレッド一覧]

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" ]