「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 開発者からレビュー担当者へ: データベース クエリをレビューするためのジュニア開発者のチェックリスト

開発者からレビュー担当者へ: データベース クエリをレビューするためのジュニア開発者のチェックリスト

2024 年 11 月 8 日に公開
ブラウズ:206

開発者として、機能的であるだけでなく、パフォーマンスが最適化された高品質のコードを提供することが重要です。開発者ドメインでの 3 年間で、私は実践的な開発者からレビュー担当者の役割に移行しました。レビュー中に私が重点を置いた重要な領域の 1 つは、データベース クエリの最適化です。

データベース クエリに注目する理由
データベース クエリは、アプリケーションのパフォーマンスに大きな影響を与える可能性があります。適切に作成されたクエリはデータを効率的にフェッチできますが、不適切に作成されたクエリは過剰なデータベース ヒットを引き起こし、システム全体の速度を低下させる可能性があります。若手開発者は、コード レビュー中にこれらのクエリのパフォーマンスをどのように評価すればよいか疑問に思うかもしれません。これが私の頼りになるチェックリストです。

データベース クエリをレビューするためのチェックリスト

  1. データベースのヒット数:

    • 最初のステップは、コードによってデータベースにヒットした回数を確認することです。データベースへのヒットごとにレイテンシーが増加する可能性があるため、一般にヒット数が少ないほどパフォーマンスが向上します。
    • プロのヒント: Django の connection.queries とreset_queries を使用して、実行されたクエリの数とそれぞれにかかる時間を追跡します。例えば: From Developer to Reviewer: A Junior Developer
  2. ヒット数の削減:

    • ヒット数がわかったら、次のステップはヒット数を減らすことができるかどうかを確認することです。データベース ヒットの削減は、多くの場合、クエリを最適化するか、複数のクエリを 1 つに結合することで実現できます。
    • 主要なテクニック:
      • Lazy Loading vs. Eager Loading: クエリがいつ評価されるかを理解します。遅延読み込みでは、データが実際に必要になるまでクエリが遅延しますが、これにより N 1 クエリの問題が発生する可能性があります。 select_関連付けまたはプリフェッチ_関連付けを使用した積極的な読み込みは、単一のクエリで関連オブジェクトをフェッチし、ヒットの合計数を減らします。
      • 結合: 関連テーブルのデータが必要な場合は、結合クエリの使用を検討してください。ここでは、Django の select_popular (外部キー関係用) と prefetch_popular (多対多または逆外部キー関係用) が友達です。
  3. 冗長なクエリの回避:

    • 同じクエリが複数回実行される冗長なクエリをチェックします。これは多くの場合、結果をキャッシュするかコードを再構築することで回避できます。
    • 例: ループ内で関連オブジェクトをクエリする代わりに、ループの前にすべての関連オブジェクトを 1 回フェッチします。
  4. メモリに関する考慮事項:

    • データベース ヒットを減らすことは重要ですが、メモリ使用量も考慮してください。大規模なデータセットをメモリに読み込むと、アプリケーションの速度が低下したり、クラッシュしたりする可能性があります。必要なレコード/データのみを取り込むことを目指してください。

結論
データベース クエリのパフォーマンスをレビューすることは、時間と経験によって培われるスキルです。若手開発者は、データベースのヒット数を数え、ヒット数を減らす方法を見つけるという基本に集中することから始めます。このプロセスでは、connection.queries、reset_queries、Django の ORM 機能などのツールが非常に役立ちます。時間が経つにつれて、コードを見るだけでパフォーマンスの問題を見つける直感が身につくでしょう。それまでは、ここで説明したツールとテクニックを参考にしてください。

追加のヒント:

  1. 実行計画を理解する: ORM クエリによって生成される SQL 実行プランを理解することで、さらに深く掘り下げていきます。 SQL の EXPLAIN などのツールは、データベース エンジンがクエリをどのように実行しているかを理解するのに役立ち、潜在的な最適化についての洞察を得ることができます。

初心者向けのヒント:
他の人のコードのレビューを始めるのに、システムのすべてのフローを知る必要はありません。コードの品質や最適化などの小さなことから始めます。基本に重点を置いて最初のパスを実行することから始めて、最終的には優れたレビュー担当者になれるでしょう。
また、レビューする際は、傲慢になるのではなく、礼儀正しく有益なコメントを心がけてください。目標はコードを改善してチームを助けることであり、間違いを指摘することだけではないことを忘れないでください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/aman-iri/from-developer-to-reviewer-a-junior-developers-checklist-for-reviewing-database-queries-4kdm?1 侵害がある場合、study_golang @163.comdelete までご連絡ください。
最新のチュートリアル もっと>
  • jQuery を使用してキーボードの Enter キーを検出する方法: 包括的なガイド
    jQuery を使用してキーボードの Enter キーを検出する方法: 包括的なガイド
    jQuery を使用したキーボード Enter キーの検出: 総合ガイドインタラクティブな Web アプリケーションを構築する場合、ユーザー入力の検出は非常に重要です。一般的なタスクの 1 つは、Enter キーの押下をキャプチャすることです。この記事では、jQuery を使用してこれをシームレスに...
    プログラミング 2024 年 11 月 8 日に公開
  • 文字列と文字列
    文字列と文字列
    弦 小文字の文字列は、JavaScript の プリミティブ データ型です。 この型で作成された文字列はオブジェクトではありませんが、JavaScript は自動的に文字列を String オブジェクトでラップします (これを「ボックス化」と呼びます)。 let imAString...
    プログラミング 2024 年 11 月 8 日に公開
  • C++ と Python で出力文字列を右揃えにする方法
    C++ と Python で出力文字列を右揃えにする方法
    右揃えで出力文字列をフォーマットするテキスト ファイルを操作する場合、データを一貫して揃えることで読みやすさと分析を向上させることができます。 C では、出力文字列を右揃えでフォーマットするにはどうすればよいのかという疑問が生じます。Python のフォーマット構文を使用すると、解決策は簡単です。l...
    プログラミング 2024 年 11 月 8 日に公開
  • ハクトーバーフェスト第 2 週
    ハクトーバーフェスト第 2 週
    2 週目では、問題の検索に費やす時間が減りました。今回は、Mattermost のドキュメント Web サイトのダーク モードで発生したバグで、特定のボタンの色が正しくなくなりました。 Docusaurus のことは知っています。他のドキュメントや、それをベースに構築されたコース教材サイトの一部を見...
    プログラミング 2024 年 11 月 8 日に公開
  • Python の Try/Except と If/Else: どちらのアプローチがより効果的ですか?
    Python の Try/Except と If/Else: どちらのアプローチがより効果的ですか?
    Try/Except と If/Else: どちらのアプローチが好ましいですか?Python で例外を扱う場合、開発者は多くの場合ジレンマに直面します。有効性をテストするか、アクションを試行して結果として生じる例外を処理するかどうか。この記事では、各アプローチのニュアンスを詳しく掘り下げ、意思決定に...
    プログラミング 2024 年 11 月 8 日に公開
  • Git リモート ブランチ
    Git リモート ブランチ
    今週、他の人のリポジトリに機能を追加する必要がありました。具体的には、CLI ツールのデフォルト パラメータを含むデフォルト設定 TOML ファイルをユーザーの $HOME フォルダ内に追加する必要がありました。 readMeMaker リポジトリに貢献しました: https://github.co...
    プログラミング 2024 年 11 月 8 日に公開
  • 単純な操作の場合、ストリームは常に従来のコレクションよりも遅いですか?
    単純な操作の場合、ストリームは常に従来のコレクションよりも遅いですか?
    Java 8 ストリームのパフォーマンスと従来のコレクションあなたは最近 Java 8 に挑戦し、そのストリーム API のパフォーマンスを従来のコレクションと比較する非公式のベンチマークを実施しました。テストには、整数のリストのフィルター処理、偶数の平方根の抽出、結果の Double リストへの保...
    プログラミング 2024 年 11 月 8 日に公開
  • 母国語を追加できる言語 API。
    母国語を追加できる言語 API。
    2016 年 4 月に、私は大好きな部族「イゲデ語」のための辞書プロジェクトを作成するというアイデアを思いつきました。ネイティブスピーカーではありません。 これが私にイゲデ言語から 5,000 語以上の単語を書いて英語に翻訳するきっかけになりました。これは間違いなく、私がこれまでに取り組んだ、ある...
    プログラミング 2024 年 11 月 8 日に公開
  • Playwright、TypeScript、JavaScript を使用した自動化
    Playwright、TypeScript、JavaScript を使用した自動化
    TypeScript を使用した劇作家 | JavaScriptのインストール Playwright は、Puppeteer チームとの協力による Microsoft の最新の Web ベースの API 自動化ツールです。Puppeteer は、DevTools プロトコルまたは WebDriver...
    プログラミング 2024 年 11 月 8 日に公開
  • Pythonの整数は何桁になるのでしょうか?
    Pythonの整数は何桁になるのでしょうか?
    整数内の桁数を数えるPython では、整数には長さという固有の概念がありません。ただし、整数の桁数を決定する必要がある場合は、いくつかの方法を検討できます。文字列に変換する1 つの簡単な方法は次のとおりです。整数を文字列に変換し、結果の文字列の長さをカウントします。例:length = len(s...
    プログラミング 2024 年 11 月 8 日に公開
  • Z-Index を使用すると、擬似要素がヘッダー要素の上に表示されるのはなぜですか?
    Z-Index を使用すると、擬似要素がヘッダー要素の上に表示されるのはなぜですか?
    Z-Index と擬似要素: ケーススタディCSS では、z-index プロパティは要素の積み重ね順序を指定します。ページで、どの要素が他の要素の「前」または「後ろ」に表示されるかを決定します。ただし、::before や ::after などの疑似要素に関しては、z-index との相互作用が単...
    プログラミング 2024 年 11 月 8 日に公開
  • タグを削除する前に頑固な HTML 特殊文字を削除するにはどうすればよいですか?
    タグを削除する前に頑固な HTML 特殊文字を削除するにはどうすればよいですか?
    頑固な HTML 特殊文字の除去strip_tags 関数は、HTML タグの削除には優れていますが、次のような厄介な HTML 特殊文字には対処できません。非改行スペースの場合は「©」、著作権記号の場合は「©」です。これは、クリーンな RSS フィードを作成する際の障害となる可能性があります。この...
    プログラミング 2024 年 11 月 8 日に公開
  • GoでAES ECBモード暗号化を復号化する方法?
    GoでAES ECBモード暗号化を復号化する方法?
    Go での AES ECB 暗号化AES ECB モード暗号化では、平文の各ブロックが個別に暗号化されますが、単純ですが安全ではない可能性のある暗号化です。方法。 Go では、次のコードを使用して AES ECB 復号化を実行できます:package main import ( "...
    プログラミング 2024 年 11 月 8 日に公開
  • PHP セッション管理における session_unset() と session_destroy() の違いは何ですか?
    PHP セッション管理における session_unset() と session_destroy() の違いは何ですか?
    PHP における session_unset() と session_destroy() の独特の役割を明らかにするPHP セッション管理の領域では、2 つの重要な関数が登場します: session_unset() および session_destroy()。どちらもセッション データ操作を中心に展...
    プログラミング 2024 年 11 月 8 日に公開
  • Vue jsx を使用した動的レイアウト: 柔軟で保守可能な UI のガイド
    Vue jsx を使用した動的レイアウト: 柔軟で保守可能な UI のガイド
    Written by Dubem Izuorah Have you ever spent hours tweaking the same web layout across multiple pages or struggled to make your UI adapt to changing ...
    プログラミング 2024 年 11 月 8 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3