sanyuwan

sanyuwan

あなたはMarkdownの翻訳の専門家です。翻訳プロセス中、すべてのMarkdownの構文とタグの整合性を保ち、HTMLタグの機能を変更せずに翻訳内容がレンダリングに影響を与えないように特に注意する必要があります。以下のルールに従って翻訳してください: 1. テキストコンテンツの特定と翻訳:Markdown内のプレーンテキストコンテンツのみを特定し、翻訳してください。これには見出し、段落、リストアイテム内のテキストが含まれます。 2. タグと属性の保持:HTMLタグ(<img>、<video>、<a>など)に遭遇した場合、タグ内のユーザーが見えるテキスト(alt属性内のテキストなど)のみを翻訳し、すべてのタグ、属性名、リンクアドレスを変更せずに保持してください。 3. 特殊な構文の処理:Markdown固有の構文(リンク、画像タグ ![alt text](link)など)の場合、リンクや構文の構造を変更せずに、説明的なテキスト部分(altテキストなど)のみを翻訳してください。 4. フォーマットを変更しないでください:太字、斜体、コードブロックなどのすべてのMarkdownのフォーマットを翻訳中も変更しないでください。 5. 翻訳されたコンテンツが正確であり、元のMarkdownの構造とHTMLタグの機能が壊れないようにするために、注意深くチェックしてください。 6. 翻訳されたテキストのみを返すことが許可されています。 以下のテキストを日本語に翻訳してください:

Prisma を使用してインデックスのクエリパフォーマンスを向上させる#

イントロダクション#

データベースインデックスとは何ですか(翻訳)#

データベースインデックスは、データベースサーバーがテーブルの部分集合を格納するために使用する小さな補助データ構造です。インデックスは通常、特定のテーブルの読み取りパフォーマンスを向上させるために使用されます。

インデックスにはキーと値のペアが含まれます:

  • キー:インデックスを作成するための列
  • :特定のテーブル内のレコードを指すポインタ

1 つのテーブルに複数の列にインデックスを作成することができます。たとえば、User という名前のテーブルがあり、id、firstName、lastName の 3 つの列がある場合、firstName と lastName の列にインデックスを作成することができます。

データベースインデックスの種類#

  • インデックス(デフォルト):通常の非一意のインデックスであり、データに制約を強制しません
  • プライマリキー:行を一意に識別するために使用されるキー
  • 一意のインデックス:列の値の一意性を強制し、重複値を防ぎます
  • 全文検索インデックス:テキスト列に使用され、全文検索をサポートします

インデックスのみでレコードを直接検索する#

データベースは、クエリを元のテーブルを「問い合わせる」ことなく、インデックスから一致するレコードを返すことも選択できます。これはインデックスのみスキャンと呼ばれます。

SELECT firstName from 'User' where firstName = 'Jimmy';

インデックスを使用した高速リーディングのコスト#

一般的に、インデックスは読み取りパフォーマンスを向上させるために非常に効果的ですが、インデックスにはコストがかかります。

書き込み操作には追加のオーバーヘッドが発生します。これは、書き込み操作ごとにインデックスを更新する必要があるためです。

インデックスのもう一つのコストは、データベースサーバーから追加のリソースを取得する必要があることです。インデックスには、データベースサーバーからの追加のストレージ、メモリ、および IO が必要です。


B-Tree インデックスによるクエリパフォーマンスの向上#

B ツリーの時間複雑度#

順次スキャンは線形時間の複雑度(O(n))を持ちます。これは、レコードを取得するのにかかる時間が、保持しているレコードの数に比例することを意味します。

一方、B ツリーは対数時間の複雑度(O log(n))を持ちます。これは、データの規模が増えるにつれて、レコードの取得コストが明らかに遅くなることを意味します。

インデックスの追加とフルスキャン#

最初のクエリ インデックスなし(216ms)

model User {
  id        Int    @id @default(autoincrement())
  firstName String
  lastName  String
  email     String
}

2 番目のクエリ firstName を追加(59ms)

model User {
  id        Int    @id @default(autoincrement())
  firstName String
  lastName  String
  email     String

  @@index(fields: [firstName])
}

3 番目のクエリ 複合インデックスを追加(17ms)

model User {
  id        Int    @id @default(autoincrement())
  firstName String
  lastName  String
  email     String

  @@index(fields: [firstName, lastName])
}

4 番目のクエリ インデックスとソートを追加 (11ms)

model User {
  id        Int    @id @default(autoincrement())
  firstName String
  lastName  String
  email     String

  @@index(fields: [firstName("desc"), lastName])
}

ハッシュインデックスによるクエリパフォーマンスの向上(postgreSQL)#

ハッシュインデックスの使用#

model User {
  id        Int    @id @default(autoincrement())
  firstName String
  lastName  String
  email     String

  @@index(fields: [firstName], type: Hash)
}
npx prisma migrate dev --name add-firstName-index

オリジナルのリンク#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。