検索
ホームページデータベースSQLコード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

サブ質問を送信してください

インタビュアー: Linux を操作したことがありますか?

私: はい

インタビュアー: メモリ使用量を確認するにはどのコマンドを使用すればよいですか?

私: free または top

インタビュアー: では、無料コマンド

を使って確認できる情報を教えてください。 私: すると、下図のように、メモリとキャッシュの使用状況がわかります。

  • #合計メモリ合計

  • ##使用済み使用済みメモリ

  • ##free 空きメモリ
  • buff/cache used キャッシュ
  • ##availableメモリ

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?##インタビュアー: それでは、使用済みキャッシュ (buff/cache) をクリアする方法がわかりました。 )

私: em... わかりません

インタビュアー: sync; echo 3 > /proc/sys/vm/ drop_caches バフ/キャッシュをクリアできます。このコマンドをオンラインで実行できるかどうか教えていただけますか?

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##私: (ポイントを送信,大喜び) メリットは非常に大きいです。キャッシュをクリアすると、使用可能なメモリ領域が増えます。PC 上の xx Guardian の小さなロケットのように、ワンクリックで大量のメモリが解放されます。

インタビュアー: em….、戻って通知を待ちます

SQL Join について話しましょう

インタビュアー: Change theトピックを決めて話しましょう 参加についてのあなたの理解

私: わかりました (また間違って答えたら終わりです、機会を捉えてください)

復習

SQL での結合は、特定の条件に従って指定されたテーブルを結合し、クライアントにデータを返すことができます。

結合メソッドには

が含まれます。

内部結合内部結合

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##左結合左結合

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##右結合右結合コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##完全結合完全結合

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?


#画像ソース: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html

インタビュアー: プロジェクト開発中に結合ステートメントを使用する必要がある場合、最適化してパフォーマンスを向上させる方法?

私: 意見が分かれましたこの場合、データサイズが小さい場合とデータサイズが大きい場合があります。

インタビュアー: Then?

私: For

1. データ サイズが小さいため、すべてが

    #2. データ規模が大きい
  • #インデックスを追加することで結合ステートメントの実行速度を最適化できます
  • 冗長な情報を使用して結合の数を減らすことができます
  • ##テーブル接続の数も同様に減らしますできる限り、1 つの SQL ステートメントに対するテーブル接続の数は 5 回以内です。

インタビュアー:

join ステートメントは、相対的にパフォーマンスを消費しますよね?

私:

はい

インタビュアー:

なぜですか?###

バッファ

私: 結合ステートメントの実行時に比較プロセスが必要です

インタビュアー: はい

私: 2 つのテーブルを 1 つずつ比較するステートメントは比較的遅いため、MySQL を使用して InnoDB エンジンを使用して、2 つのテーブルのデータをメモリ ブロックに順番に読み取ることができます。たとえば、次のステートメントを使用すると、関連するメモリ領域を確実に見つけることができます。 show variables like '%buffer%'

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

図に示すように、 join_buffer_size のサイズが join ステートメントの実行パフォーマンスに影響することを示します

インタビュアー: 他には何がありますか?

大前提

#私: どんなプロジェクトも最終的にはオンラインになります。データの生成は避けられず、データの規模が小さすぎることはできません

インタビュアー: はいこのように

私:データベース内のほとんどのデータは、最終的にはハードディスクに保存され、ファイルの形式で保存されます。

MySQL の InnoDB エンジンを例に挙げます

  • InnoDB は基本的な IO ユニットとしてページを使用し、各ページのサイズは 16KB

  • #InnoDB は、データを保存するためにテーブルごとに .ibd ファイルを作成します

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##検証

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

私: これは、インデックスを使用することもできますが、接続するテーブルと同じ数のファイルを読み取る必要があることを意味します。ただし、ハードディスクのヘッドを頻繁に動かすことは避けられません。

インタビュアー:つまり、ヘッドを頻繁に動かすとパフォーマンスに影響が出ますよね。

Me:はい、現在のオープンソース フレームワークは、hbase や kafka などのシーケンシャルな読み取りと書き込みによってパフォーマンスが大幅に向上したと言いたがりませんか

インタビュアー: そうです、それでは Linux がこれを最適化していると思いますか? ヒント、無料のコマンドをもう一度実行して確認してください

私:なぜキャッシュが 1.2G を超えるのか不思議です

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

画像ソース: https://www.linuxatemyram.com/

インタビュアー:

  • buff/cache が何に保存されているかについて考えたことはありますか?

  • バフ/キャッシュがこれほど多くのメモリを占有するのに、使用可能なメモリはあるのにまだ 1.1G あるのはなぜですか?

  • 2 つのコマンドを使用して buff/cache によって占有されているメモリをクリアできるのに、プロセスを終了することによってのみ使用済みメモリを解放できるのはなぜですか?

じっくり味わってください

数分間考えた後

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

私: 記憶を解放しますbuff/cache が何気なく占有しているということは、それが重要ではないことを意味しており、それをクリアしてもシステムの動作には影響しません

インタビュアー: 完全に真実ではありません

私: そうですか? 「CSAPP」(コンピュータシステムの詳細な理解)の文を思い出しました。

メモリ階層の本質は、ストレージデバイスの各層が下位層のデバイスのキャッシュであるということです

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##平たく言えば、Linux がメモリをハードディスクのキャッシュとして扱うことを意味します

関連情報: http:/ /tldp.org /LDP/sag/html/buffer-cache.html

インタビュアー: これで採点の質問に答える方法がわかりました

#私:

私….

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?##参加アルゴリズム

インタビュアー:

もう一度教えてください機会が与えられ、結合アルゴリズムを実装するように求められたらどうしますか?

私:

インデックスがない場合、ネストされたループは終了します。インデックスがある場合は、

index を使用してパフォーマンスを向上させることができます.

インタビュアー: join_buffer に戻りますが、join_buffer には何が保存されていると思いますか?

私: スキャン プロセス中に、データベースはテーブルを選択し、それを追加します。返され、他のテーブルと比較される必要があるデータは、join_buffer に置かれます。

インタビュアー: インデックスがある場合、どのように対処しますか?

私: これは比較的簡単です。2 つのテーブルのインデックス ツリーを直接読み取って比較するだけです。それで終わりです。ここでインデックス以外の処理方法を紹介しましょう

ネストされたループ結合

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

##ネストされたループは、テーブル内のデータを一度に 1 行だけ読み取ります。つまり、If externalTable には 100,000 行のデータがあり、innerTable には 100 行のデータがあり、10,000,000 回読み取る必要があります (これら 2 つのテーブルのファイルがオペレーティング システムによってメモリにキャッシュされていないと仮定し、これらをコールド データ テーブルと呼びます)

もちろん、現在このアルゴリズムを使用しているデータベース エンジンはありません (遅すぎる)

#ネストされたループをブロックする

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?ブロック ブロック、つまり、I/O オーバーヘッドを削減するために毎回データがメモリにフェッチされます

MySQL InnoDB はインデックスを使用できない場合にこのアルゴリズムを使用します

次の 2 つのテーブル t_a と t_b を考慮してください

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

それが不可能な場合インデックスを使用して結合操作を実行すると、InnoDB はブロック ネスト ループ アルゴリズムを自動的に使用します。

コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

概要

学校、データベースの先生 私はデータベース パラダイムを学ぶのが最も好きですが、仕事に就いて初めて、すべてがパフォーマンスに基づいている必要があることを学びました。冗長性が可能であれば、冗長性を使用します。冗長性が不可能な場合は、次の場合に参加してください。結合はパフォーマンスに大きな影響を与えます。 join_buffer_size を増やしてみるか、ソリッド ステート ドライブに変更してください。

参考資料

「コンピュータ システムを深く理解する」-第 6 章 メモリ階層
「Linux ディスクの実験と楽しみ」の著者キャッシュ" いくつかの例を使用して、ハードディスク キャッシュがプログラムの実行パフォーマンスに及ぼす影響を説明します。
《Linux がラムを食べました》フリー パラメータの説明
Linux でバッファ/ページ キャッシュ (ディスク キャッシュ) をクリアする方法コマンドは記事の冒頭にあります Explain
MySQL の実行方法: MySQL をルートから理解する
ブロック ベスト ループ MariaDB の公式ドキュメントでは、ブロック ネスト ループ アルゴリズムの実装について説明しています

以上がコード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はJava学习指南で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
SQL:学習ハードルを克服する方法SQL:学習ハードルを克服する方法Apr 26, 2025 am 12:25 AM

SQLの専門家になるには、次の戦略を習得する必要があります。1。テーブル、行、列、インデックスなどのデータベースの基本概念を理解する必要があります。 2。解析、最適化、実行プロセスなど、SQLのコア概念と作業原則を学びます。 3。CRUD、複雑なクエリ、ウィンドウ関数など、基本的および高度なSQL操作に習熟しています。 4.マスターデバッグスキルと説明コマンドを使用して、クエリパフォーマンスを最適化します。 5.実践を通じて学習の課題を克服し、学習リソースを利用し、パフォーマンスの最適化を重視し、好奇心を維持します。

SQLおよびデータベース:完璧なパートナーシップSQLおよびデータベース:完璧なパートナーシップApr 25, 2025 am 12:04 AM

SQLとデータベースの関係は密接に統合されており、SQLはデータベースを管理および操作するためのツールです。 1.SQLは、データ定義、操作、クエリ、および制御に使用される宣言言語です。 2。データベースエンジンはSQLステートメントを解析し、クエリプランを実行します。 3.基本的な使用には、テーブルの作成、データの挿入、クエリが含まれます。 4.高度な使用には、複雑なクエリとサブ征服が含まれます。 5.一般的なエラーには、構文、ロジック、パフォーマンスの問題が含まれます。これは、構文チェックおよび説明コマンドを介してデバッグできます。 6.最適化手法には、インデックスの使用、フルテーブルスキャンの回避、クエリの最適化が含まれます。

SQL対MySQL:2つの関係を明確にしますSQL対MySQL:2つの関係を明確にしますApr 24, 2025 am 12:02 AM

SQLはリレーショナルデータベースを管理するための標準言語であり、MySQLはSQLを使用するデータベース管理システムです。 SQLは、CRUD操作を含むデータベースと対話する方法を定義しますが、MySQLはSQL標準を実装し、ストアドプロシージャやトリガーなどの追加機能を提供します。

SQLの重要性:デジタル時代のデータ管理SQLの重要性:デジタル時代のデータ管理Apr 23, 2025 am 12:01 AM

データ管理におけるSQLの役割は、クエリ、挿入、更新、削除を介してデータを効率的に処理および分析することです。 1.SQLは、ユーザーが構造化された方法でデータベースと通信できるようにする宣言言語です。 2。使用例には、基本的な選択クエリと高度な参加操作が含まれます。 3.句の忘却や誤用の結合などの一般的なエラーは、説明コマンドを介してデバッグできます。 4。パフォーマンスの最適化には、インデックスの使用と、コードの読みやすさや保守性などのベストプラクティスに従うことが含まれます。

SQL:Essential Concepts and Skillsを開始しますSQL:Essential Concepts and Skillsを開始しますApr 22, 2025 am 12:01 AM

SQLは、リレーショナルデータベースを管理および操作するために使用される言語です。 1.テーブルの作成:CreateTableUsersなどのCreateTableステートメントを使用します(IdintPrimaryKey、NameVarchar(100)、EmailVarchar(100)); 2。データを挿入、更新、削除:InsertInto、更新、incertintintousers(id、name、email)values(1、 'johndoe'、 'john@example.com')などのステートメントを削除します。 3。クエリデータ:Selecなどの選択ステートメントを使用します

SQL:言語、MySQL:データベース管理システムSQL:言語、MySQL:データベース管理システムApr 21, 2025 am 12:05 AM

SQLとMySQLの関係は次のとおりです。SQLはデータベースの管理と操作に使用される言語であり、MySQLはSQLをサポートするデータベース管理システムです。 1.SQLは、CRUD操作とデータの高度なクエリを許可します。 2.MYSQLは、パフォーマンスとセキュリティを改善するためのインデックス、トランザクション、ロックメカニズムを提供します。 3. MySQLのパフォーマンスを最適化するには、クエリの最適化、データベースの設計、監視とメンテナンスに注意が必要です。

SQLが行うこと:データの管理と操作SQLが行うこと:データの管理と操作Apr 20, 2025 am 12:02 AM

SQLはデータベース管理とデータ操作に使用され、そのコア機能にはCRUD操作、複雑なクエリ、最適化戦略が含まれます。 1)CRUD操作:INSERTINTOを使用してデータを作成し、データの読み取りを選択し、データの更新を更新し、削除データを削除します。 2)複雑なクエリ:Groupbyを介して複雑なデータを処理し、条項を備えています。 3)最適化戦略:インデックスを使用し、完全なテーブルスキャンを避け、参加操作とページングのクエリを最適化してパフォーマンスを向上させます。

SQL:データ管理に対する初心者向けのアプローチ?SQL:データ管理に対する初心者向けのアプローチ?Apr 19, 2025 am 12:12 AM

SQLは、構文が単純で、機能が強力であり、データベースシステムで広く使用されているため、初心者に適しています。 1.SQLは、リレーショナルデータベースを管理し、テーブルを介してデータを整理するために使用されます。 2。基本操作には、データの作成、挿入、クエリ、更新、削除が含まれます。 3.結合、サブクエリ、ウィンドウ関数などの高度な使用法により、データ分析機能が強化されます。 4.一般的なエラーには、検査と最適化を通じて解決できる構文、ロジック、パフォーマンスの問題が含まれます。 5.パフォーマンス最適化の提案には、インデックスの使用、Select*の回避、説明の使用を使用してクエリの分析、データベースの正規化、コードの読み取り可能性の向上が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター