スタイル・エッジLABO技術ブログ

士業集客支援/コンサルティングのスタイル・エッジグループ スタイル・エッジLABOのエンジニアによるブログです。

INDEX貼ってますか…?

はじめまして!スタイル・エッジ システム事業部のyskaです。
業務としては、Laravelでアプリケーションを開発しております。
今回のテーマは「DBのINDEX」です。

INDEXとは

INDEXとは、「クエリの実行を速くするもの」です。

<userテーブル:4050件>
f:id:styleedge_tech:20190529152421p:plain

この表に対してoldカラムでソートをかけようとしたとき、ID順になっているので時間がかかってしまいます。
しかし、oldカラムにINDEXを貼ることで、早く処理されデータを取得することができるのです。

<userテーブル:4050件>
f:id:styleedge_tech:20190529154821p:plain
↑select id, old from user ORDER BY old desc;

・INDEXなし:15.1ms
・NDEXなし:5.8ms

なぜoldカラムにINDEXを貼っただけで処理速度が早くなるのでしょうか?

INDEXを貼るメリット

INDEXは
・項目数やデータ量が多いとき
・WHERE句で頻繁にデータを抽出するとき
等に威力を発揮します。
それは、検索をする際に目的のデータを見つけるまですべての行を1つ1つ調べていくよりも、
牽引を利用して目的の行の場所を見つけてからその行のデータを読み取るほうが効率的だからです。
データが大量にあれば大量にあるだけその効果を発揮します。
DBで検索で大量のデータを処理する際はINDEXを貼ってみてください。

INDEXを貼るデメリット

もちろんメリットがあればデメリットもあります。
・データが少ない
・格納されるデータの種類が少ない場合
等は威力を発揮しません。
「どこにでも貼れば早くなるんでしょ?」じゃだめなのです!
データの検索があまり行われなかったり、検索の結果件数が多くない場合は、
INDEXを貼ってもあまり意味がありません。

INDEXを貼らないパターン

検索に便利なINDEXちゃんですが、
テーブルのデータの更新を行うたびにINDEXテーブルも対応してデータの更新を行わなければならないので、
CRUDの処理でやることが多くなってしまいます。

結論

DB設計のときはインデックスを無駄に多用せず適切な部分だけに使う!
つければいいんでしょ精神はやめましょう!!

スタイル・エッジ システム事業部では、一緒に働く仲間を募集しています。
もし興味を持っていただけましたら、ぜひ採用サイトものぞいてみてください!

株式会社スタイル・エッジ 採用サイト