MySQLでインデックスあり・なしの検索速度を比較してみました。

usersとfavoritesが1対多になるようにして、
indexの設定あり・なしの2つのDBを用意して比較しました。

予め、
usersは 100,000件
favoritesに300,000件のレコードを用意しました。

indexなし

・テーブル作成

create table users(
id int(11) not null primary key auto_increment,
name varchar(40) not null
) engine=innodb;

create table favorites(
user_id int(11) not null,
favorite_name varchar(40) not null
) engine=innodb;

・select
select

・explain
explain

indexあり

・テーブル作成

create table users(
id int(11) not null primary key auto_increment,
name varchar(40) not null
) engine=innodb;

create table favorites(
user_id int(11) not null,
favorite_name varchar(40) not null,
foreign key(user_id) references users(id)
) engine=innodb;

・select
select

・explain
explain

結果

  • indexなし クエリ実行時間 0.38 秒
  • indexあり クエリ実行時間 0.0005秒

explainの結果から、indexがないと
テーブルのフルスキャンが発生してしまっていることがわかりました。