例のために:
私のデータベースに、フィールドがあるテーブルが 1 つあるとします。
id、first_name (VARCHAR 100 文字)、last_name (VARCHAR 100 文字)、about (VARCHAR 10,000 文字)
ここで、データベースが 100 ギグの大きさであるとしましょう。
RAM が 4 ギガしかないマシンでは、ランダム アクセスはどのように見えるでしょうか?
クエリが作成されるたびに一定の時間がかかりますか?
例のために:
私のデータベースに、フィールドがあるテーブルが 1 つあるとします。
id、first_name (VARCHAR 100 文字)、last_name (VARCHAR 100 文字)、about (VARCHAR 10,000 文字)
ここで、データベースが 100 ギグの大きさであるとしましょう。
RAM が 4 ギガしかないマシンでは、ランダム アクセスはどのように見えるでしょうか?
クエリが作成されるたびに一定の時間がかかりますか?
名で検索し、インデックスが作成されていない場合、サーバーはテーブルの各行を読み取り、それを where 句と比較します。結果を取得するのにかかる時間は行の位置に依存するため、このクエリはおそらく時間の経過とともに大きく異なります。たとえば、ファーストネーム「a」はすぐに見つかりますが、ファーストネーム「z」ははるかに時間がかかります。基本的に、データベースの線形/順次アクセスを行っています。
firstname MySQL にインデックスがあった場合、列にツリーを構築します。ツリーは、検索に使用すると非常に効率的です。基本的に、バイナリ検索を行っているため、値「a」と「z」は同じ量の操作を必要とします。私が操作を言っていることに注意してください。
クエリが常に同じ時間内に実行されることを保証できる方法があります。データベースはメモリを大量に消費しますが、ほとんどの人は、データベースが実際にディスク io にバインドされているという事実を見落としています。これらの要因により、実行時間が常に予測可能で一定であることを保証できる可能性はほとんどありません。ただし、使用される操作の数が最適化されたままであることを確認できます。
インデックスが読み取りを高速化する一方で、書き込みが遅くなるもう1つのこと。したがって、インデックス作成は諸刃の剣です。本当に必要なものだけを索引付けします。