window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() Ruby on Rails ソフトウェア開発インデックス v2 - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2020-06-16
ソフトウェア開発

Ruby on Railsソフトウェア開発インデックス v2

The Codest

ダミアン・ワトロバ

Software Engineer

Ruby on Railsフレームワークで作業する場合、通常はMySQLやPostgreSQLのようなリレーショナルデータベースを扱います。Active Record Migrationsを使用してマイグレーションを定義するとき、いわゆるインデックスに出くわしますが、初心者はインデックスとそれがもたらす利点についてよく理解していないことがよくあります。

Ruby on Railsフレームワークで作業する場合、通常はMySQLやPostgreSQLのようなリレーショナルデータベースを扱います。Active Record Migrationsを使用してマイグレーションを定義するとき、いわゆるインデックスに出くわしますが、初心者はインデックスとそれがもたらす利点についてよく理解していないことがよくあります。

この投稿では、インデックスとは何か、インデックスが何のために使われるのかを説明し、インデックスの採用方法についていくつかのグッドプラクティスを紹介したい。

データベース

データベース・エンジンは数多くあるが、最もポピュラーなもののひとつに、先に挙げたMySQL、PostgreSQL、Oracle、Microsoft SQL Serverがある。これらはすべてリレーショナル・データベースであり、すべてのデータは互いに関連付けられ、テーブルに格納されている。各テーブルの行はレコードと呼ばれ、それぞれ固有の識別子(id)を持っている。https://db-engines.com/en/ranking、最も人気のあるデータベースエンジンのランキングをチェックできる。MongoDBのような非リレーショナルデータベースもあります。

インデックスの作成

データベースのテーブルは、数個から数十個、極端な場合は数百個のカラムを持つことができる。各テーブルの行数は無制限であることに注意してください。この数はデータベースの構造から直接生じるものではなく、レコードの数がどんどん増えていき、結果としてデータベースが大きくなっていくことを常に想定しておく必要があります。既存のアプリケーションで書かれた初期の仮定やクエリは、レコード数が少ないか中程度であれば素晴らしいかもしれませんが、時間の経過とともに、より多くのデータが到着すると、アプリケーションとデータベースとの通信は効率的ではなくなります。

プログラマーの役割は、テーブルからデータを取り出すためのクエリーを書くことだが、クエリーの最適な処理方法はデータベース・エンジンに依存する。データベースエンジンはデータをディスクからメモリにロードし、それをスキャンすることを覚えておいてください。つまり、多くのユーザーが同時に複雑な操作を行うと、検索を実行するためのリソースが不足するため、何人かのユーザーが順番を待たなければならなくなります。これが、関連インデックスが非常に重要な理由である。

ウィキインデックス - テーブルの検索処理を高速化するデータ構造。

各インデックスには、テーブル内のレコードを検索するために使用するキー(1つまたは複数のカラム)を定義する必要があります。インデックス内のデータは、あらかじめ定義されたキーでソートされる。日常生活で最も単純な例は、名前と姓でソートされた電話帳である。この場合のインデックスは姓と名である。

最適なインデックスキーの選び方は?難しいことではありません。いくつかのルールを覚えておいてください。以下のカラムに基づいてインデックスを作成する:

- は私たちの問い合わせ(WHERE)でよく使われる、

- を互いに組み合わせることで、一意な値(つまり、正確に1行を示す値)が得られます、

- はいわゆる連結列(JOIN)として使われる、

- は最も選択的なキー、つまりクエリーを書くときに最も少ない行数を返すキーを与える。

どのキーがテーブルにとって最適かがすでに分かっているのであれば、インデックスがいくつ必要かを自問することもできる。この場合、設計段階ですでにテーブルを参照するクエリを把握しておくのがベストです。

登場する特定のクエリのためにインデックスを作成しよう。インデックスもテーブルと同様、どこかに格納する必要があるため、カラムごとにインデックスを持つテーブルを作成すると、使用する容量が大幅に増えることを考慮しなければならない。

ユニーク・インデックスの作成

もうひとつ考えなければならないのは、一意性である。インデックスが本当に一意であるかどうかを考えるのに5分余分に費やす価値はあります。こうすることで、クエリオプティマイザに、クエリの重複を期待する必要がないことを伝えることができます。例えば、メールアドレス:

frozenstringliteral: true

クラス CreateUsers < ActiveRecord::Migration[6.0]
def change
createtable :users do |t|
t.string :email, null: false
end
addindex :users, :email, unique: true
end
終了

PostgreSQLエンジンの例で、emailカラムにユニークインデックスがある場合とない場合のクエリー速度の違いを示します。

1.サンプル コード スニペットを自分のデータベース上で作成し、以下の例をテストできるようにしてください。まず、カラムが1つの空のテーブルを作成してみましょう:

 CREATE TABLE users (
   電子メール varchar
 );

2.テスト用に10,000レコードを生成してみよう:

 DO $
   BEGIN FOR i IN 1..10000 LOOP
     INSERT INTO users values((select 'user' || i || '@example.com'));
   END LOOP; END;
 $;

EXPLAIN ANALYZEを使用して、データベース内の特定のユーザーを検索する場合のクエリの処理速度をチェックします。

EXPLAIN ANALYZE SELECT email FROM users WHERE email = 'user890example.com';

このクエリーは、興味のあるレコードを探すために、テーブル全体を強制的に反復させる。

この処理はシーケンシャル・スキャンと呼ばれる。この場合、テーブル全体を読み取り、特定の行をフィルタリングするのが最適な方法である。

PostgreSQLは不要な行をフィルタリングし、興味のある行だけを返します。これはこの例では本当に最善の方法です。シーケンシャルスキャンが常に悪いわけではなく、シーケンシャルスキャンが理想的な場合もあります。

4.今こそ、INDEX UNIQUEを持つテーブルに対して既に行われたクエリをチェックする時です。インデックスを設定し、クエリを実行してみましょう。

 EATE UNIQUE INDEX index_email on users(email);
 EXPLAIN ANALYZE SELECT email FROM users WHERE email = 'user890example.com';

今回、PostgreSQLはインデックススキャンを利用しました。

インデックスを使用する場合、数行だけを選択するのは非常に効率的である。しかし、より多くのデータを選択すると、インデックスとテーブルのスキャンに時間がかかりすぎる。

概要

ご覧のように、インデックスを持つ列に対する問い合わせの実行時間は非常に短くなっています(示された例では、1.267msから0.111msに減少しており、91.24%と同じです!)。最も重要な違いは、PostgreSQLが興味のあるレコードを検索する方法です。最初のケースでは、データベースエンジンは必要なレコードを探すためにテーブル全体を検索しなければなりませんでした。しかし、2つ目のケースでは、インデックス構造はソートされ、一意であるため、エンジンはレコードがどこにあるかを知っており、クエリ処理の時間を大幅に短縮することができました。

大規模なデータベースや非常に複雑なクエリの場合、インデックスを正しく設定することで、データベースを検索するマシンの速度を上げることなく、アプリケーションの作業を大幅に高速化することができます。

各カラムにインデックスを作成することは良い習慣ではないことを覚えておく価値がある。確立されたインデックスは、目的のデータを検索する際のオプティマイザの作業をスピードアップさせますが、同時に新規の挿入や既存のインデックスの更新を遅くします。

続きを読む

– Railsアプリで一般的なJSフレームワークを使用する必要がありますか?Stimulus.jsが代替になるかもしれません。

– 新しい現実の時。リモートワークの時代が始まって1カ月

– ウェブアプリ開発:なぜRuby on Railsは選ぶ価値のある技術なのか?

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese