目次
サブ質問を送信してください" >サブ質問を送信してください
バッファ" >バッファ
大前提" >大前提
概要" >概要
参考資料" >参考資料
ホームページ データベース SQL コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?

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

Jul 26, 2023 pm 04:51 PM
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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL の ID 属性は何を意味しますか? SQL の ID 属性は何を意味しますか? Feb 19, 2024 am 11:24 AM

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 Jun 02, 2023 am 11:07 AM

Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。

SQL の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? Dec 17, 2023 am 08:41 AM

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか?データの集計と統計は、データ分析と統計を実行する際の非常に重要な手順です。 MySQL は強力なリレーショナル データベース管理システムとして、データの集約と統計操作を簡単に実行できる豊富な集約機能と統計機能を提供します。この記事では、SQL ステートメントを使用して MySQL でデータの集計と統計を実行する方法を紹介し、具体的なコード例を示します。 1. カウントには COUNT 関数を使用します。COUNT 関数は最も一般的に使用されます。

See all articles