sqlのインデックス化について
2011/04/06
selectを投げたら数時間後にエラーとして返ってきたので処理が重いんだねと思いつつ途方にくれていた。
そこで現れたのが「インデックス化」ってヤツ。
「目次にする」とか意味わかんない表現が散見している。
自分なりにまとめてみた。
インデックス化をするとselectが早くなる場合がある。
インデックス化をするとinsert・updateが遅くなる場合がある。
インデックス化は列(カラム)に対して行う。
インデックス化をするとinsert・updateが遅くなる場合がある。
インデックス化は列(カラム)に対して行う。
こんな感じかな。
さらに細かい内容。
インデックス化をするとSQL用の見えない列(カラム)が作成されている。そのため、insert・updateをする際、その列(カラム)にもデータを記載するため処理が遅くなる。
インデックス化をするんだったらwhereやjoinとかで頻繁に使う列(カラム)をしてあげる。
インデックス化をするんだったらwhereやjoinとかで頻繁に使う列(カラム)をしてあげる。
さらにまとめてみたもの。
通常の「order sort」だったら一つずつチェックして並べ替えている。
「index化」ってヤツをしておけば一つずつチェックする必要がなくなるため、処理時間が早くなる。
そのため頻繁に使う列を「index化」ってヤツにしておけばselectの結果が早くなる。
「index化」ってヤツをしておけば一つずつチェックする必要がなくなるため、処理時間が早くなる。
そのため頻繁に使う列を「index化」ってヤツにしておけばselectの結果が早くなる。
「index化」ってヤツをすると感覚的にはテーブルに見えない専用の列ができる感じ。
そのため、insert・updateとかするとその分、処理が重くなるという問題が発生。
※全部の列を「index化」するとデータの追加とかの処理が重くなる。かわりにselectの処理は軽くなる。
selectの前にexplainってのをつけると処理にかかる予測時間(?)がでてくる。
costの値が大きいと遅い。具体的にどれだけの値が「大きい」かは不明。
「select * from [テーブル]」だったら「explain select * from [テーブル]」みたいな感じで。