count(*)からinnodbにおけるindex構成を確認する

* 概要

今回はinnodbにおけるcountの高速化について検証する。

きっかけは下記のブログですが。いつもお世話になっております。

http://nippondanji.blogspot.jp/2010/03/innodbcount.html

要約すると下記のようなスキーム雨がある時

CREATE TABLE t1 (  
  a bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
  b int(11) DEFAULT NULL,  
  c tinyint(4) DEFAULT NULL,  
  d date DEFAULT NULL,  
  e varchar(200) DEFAULT NULL,  
  f varchar(200) DEFAULT NULL,  
  g varchar(200) DEFAULT NULL,  
  h varchar(200) DEFAULT NULL,  
  i varchar(200) DEFAULT NULL,  
  PRIMARY KEY (a)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

下記のようなsqlを想定する

SELECT count(*) FROM t1;

このとき例えばtinyintなどにindexを貼ることで、count(*)の高速化が見込める。

innodbのcount(*)において全レコードへのアクセスが必要になることは変わりないが
これは主キー(bigint)を全走査することよりも、小さいindexを全走査するほうが効率が良いということである。

まあ頭のなかでは理解できて、予想はできているんだけどちゃんと自分の手でピコピコやりたいなというところで下記を確認する。
1. 検索速度がa,b,cで変わることを確認(参照テーブルも)
2. e,f,g,h,iがあるときとないときで検索速度がそこまで変わらないことの確認(クラスタインデックスのノードが影響を与えないこと) 続きを読む count(*)からinnodbにおけるindex構成を確認する


linux上での時間について

まあなんでもないことでもあるんだけれども、個人的にもメモ。

本日はlinuxにおける、時間、についてです。

正確に言うとlinuxシステムとして提供している時間です。これには三種類ありそれぞれ

  • 実時間
  • ユーザ時間
  • システム時間

になります。それぞれ説明していくと。 続きを読む linux上での時間について