データベースのインデックスは、それを使用するときに注意してください!


我々が始める前に、断り書きをしましょう😉.

This is my current understanding of Database Index.
If there is any mistake that write that lead to misunderstanding, please let me know and I will update this post ASAP.


始めましょう🚀

データベースインデックスとは


データベースインデックスは、データベース内のデータを検索するための組み込みツールです.インデックスはすぐに我々のクエリのレコードを検索します.

問題


理解するために、ユースケースを作ります.例として、id, full_name & genderを持つユーザーテーブルがあります

そのユーザーテーブルには1000行があります.2人は男性、残りは998人である.
我々の男性ユーザーを見つける必要があると言います.
このクエリを実行した後、2人のユーザーの結果があります.
シーンの背後には、データベースエンジンは2行を見つけるために1000行のすべてを検索します.
はい、それは非効率的ですね.しかし、それはどのようにデータベースエンジンが動作します.😵

解決策は?


解決策はデータベースインデックスを使用することです.💡
インデックスを使用すると、データベースエンジンは、選択したインデックスに基づいてテーブルをマップするアルゴリズムを作成します.
したがって、ユーザーテーブル内のSELECT * FROM users WHERE gender = 'male'列にインデックスを作成します.
再び我々の質問に戻ってください、そして、我々がgenderを実行するならば、我々は結果として再び2人のユーザーを得ます.
違いは、今すぐデータベースエンジンは2行を検索する2行を検索します.
今のサウンド効率❗

でも待ちます。


私たちが知っているならば、多分このような考えがあります.

"let's create index for all of our column, so we can get quick result every time we search something 🤔"


thats右、あなたはすべての検索を簡単にクエリを取得します.
しかし、それを使用しないでください.インデックスが逆さまになってもインデックスもダウンしている.
インデックスを作成すると、シーンデータベースエンジンの背後にデータベースに追加データが書き込まれます.
再び我々のユーザーテーブルに戻ります.計算は以下のようになります.
2 index (1 for ID, 1 for gender) * 1000 rows = 2000
# PK is always get index
我々が我々のコラムの全てにインデックスを置くならば
4 index (ID, gender, full_name, created_at) * 1000 rows = 4000
# Thats only 4 columns.
# The more column we create, the more usage it will take when CREATE, UPDATE, DELETE, etc.
結論は:賢明にそれを使用してください.😇

インデックス作成方法

  • PostgreSQL
  • CREATE TABLE "customers" (
      "id" SERIAL PRIMARY KEY,
      "gender" varchar,
      "full_name" varchar,
      "created_at" timestamp
    );
    
    CREATE INDEX ON "customers" ("gender");
    
  • MySQL
  • CREATE TABLE `customers` (
      `id` int PRIMARY KEY AUTO_INCREMENT,
      `gender` varchar(255),
      `full_name` varchar(255),
      `created_at` timestamp
    );
    
    CREATE INDEX `customers_index_0` ON `customers` (`gender`);