インデックス

SQLServer【Index編】#S2_04_キャッシュとは

今回はキャッシュについて解説します。

キャッシュとは?

キャッシュとは,処理を高速に行うための機能です。

コンピューターには,メモリの部分とハードディスクなどのディスクの部分がありますよね。電源を切ったら忘れてしまうメモリと,物理的に書き込んでいるディスクです。

この2つ,どちらも記憶領域ですが,速度が全く違います。ディスクは物理的に書き込まれているので,そのファイルを開いて,読み込みます。メモリは読み込んだ状態で記憶しているので,すぐに使うことができます。この差は1000倍くらいと思っておいていいでしょう。例えば東京大阪間を自転車で移動するのと,新幹線で移動するくらいの速さの違いがあります。なので,メモリ上にデータがあれば速いのですが,ディスクから読み込むと遅いわけです。

キャッシュとは,ディスクから読み込んだデータを,メモリ内に覚えておくことです。こうすることで,再度そのデータを使いたい場合に,すぐに使うことができます。毎回ディスクに読みに行かなくて済みます。

それならすべてメモリに覚えておけばいいと思うかもしれませんが,なかなかそうはいきません。例えばハードディスクが500ギガバイトのPCの場合,メモリが4ギガバイトとか8ギガバイトだったりします。到底すべてのデータをメモリ内に覚えておくことはできません。それにパソコンの処理は当然SQLServer以外にもいろいろと動作していますから,1つのアプリケーションに割り当てられるメモリの限界があり,4ギガバイトであれば,その半分の2ギガまでしかアプリケーションに割り当てられないといった制約があります。

なので,メモリにあったデータの,時間がたてば他のデータに置き換わり,メモリ内からなくなります。そうなればまたディスクから読み込むことになります。

キャッシュのクリア

先述の通り,メモリ内にデータがあれば高速にデータを取得でいますが,初回や,2回目以降も,キャッシュになくなってしまったら,また遅くなるわけですから,SQLでの検索の実力測定は,キャッシュが無い状態で行わないと,本当の力が分かりません。なので,速度を計測する場合は,毎回キャッシュのクリアを行うコマンドを実行してからSQLを実行させます。

本レクチャーでは,毎回下記の2つのコマンドを実施しながらSQLの検証を行います。

キャッシュクリアのコマンド

DBCC DROPCLEANBUFFERS バッファー プールのクリーン バッファーと、列ストア オブジェクト プールの列ストア オブジェクトをすべて削除します。
DBCC FREEPROCCACHE プラン キャッシュからすべての要素を削除するか、プラン ハンドルまたは SQL ハンドルを指定して特定のプランを削除するか、指定したリソース プールに関連付けられたすべてのキャッシュ エントリを削除します。

 

SQLServerインデックスを理解して検索を高速にする方法

#S1_01_はじめに

#S1_02_インデックスとは
#S1_03_インデックスの有無実演
#S1_04_SQLServerのインストール
#S2_01_データベースとテーブルの作成
#S2_02_データの作成
#S2_03_全件検索
#S2_04_キャッシュとは
#S2_05_検索条件ありで検索
#S2_06_テーブルスキャンとは
#S2_07_インデックスの種類
#S2_08_非クラスター化インデックスの作成
#S2_09_非クラスター化インデックスの内部構造
#S2_10_インデックスのない列の検索とインデックスの有効化無効化
#S2_11_クラスター化インデックスの作成
#S2_12_クラスター化インデックスの内部構造
#S2_13_クラスター化インデックスの検索
#S2_14_インデックスの検索補足
#S2_15_付加列インデックス
#S2_16_プライマリキーとユニークキー
#S2_17_インデックス作成手順
#S2_18_インデックスの注意点
おわりに

参考図書

SQL

SQL Server 2016の教科書 開発編

SQL Server Transact-SQLプログラミング 実践開発ガイド

SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ

SQL Server 2016データベース構築・管理ガイド Enterprise対応

設計

達人に学ぶDB設計 徹底指南書

内部構造

絵で見てわかるSQL Serverの仕組み

アドバンストMS SQL SERVER 2008 構築・管理 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)