コード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?
サブ質問を送信してください
インタビュアー: Linux を操作したことがありますか?
私: はい
インタビュアー: メモリ使用量を確認するにはどのコマンドを使用すればよいですか?
私: free または top
インタビュアー: では、無料コマンド
を使って確認できる情報を教えてください。 私: すると、下図のように、メモリとキャッシュの使用状況がわかります。
#合計メモリ合計
- ##使用済み使用済みメモリ
##インタビュアー: それでは、使用済みキャッシュ (buff/cache) をクリアする方法がわかりました。 )
私: em... わかりません
インタビュアー: sync; echo 3 > /proc/sys/vm/ drop_caches
バフ/キャッシュをクリアできます。このコマンドをオンラインで実行できるかどうか教えていただけますか?
##私: (ポイントを送信,大喜び) メリットは非常に大きいです。キャッシュをクリアすると、使用可能なメモリ領域が増えます。PC 上の xx Guardian の小さなロケットのように、ワンクリックで大量のメモリが解放されます。
インタビュアー: em….、戻って通知を待ちます
SQL Join について話しましょう
インタビュアー: Change theトピックを決めて話しましょう 参加についてのあなたの理解
私: わかりました (また間違って答えたら終わりです、機会を捉えてください)
復習
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%'
図に示すように、 join_buffer_size のサイズが join ステートメントの実行パフォーマンスに影響することを示します
インタビュアー: 他には何がありますか?
大前提
#私: どんなプロジェクトも最終的にはオンラインになります。データの生成は避けられず、データの規模が小さすぎることはできません
インタビュアー: はいこのように
私:データベース内のほとんどのデータは、最終的にはハードディスクに保存され、ファイルの形式で保存されます。
MySQL の InnoDB エンジンを例に挙げます
InnoDB は基本的な IO ユニットとしてページを使用し、各ページのサイズは 16KB
#InnoDB は、データを保存するためにテーブルごとに .ibd ファイルを作成します
私: これは、インデックスを使用することもできますが、接続するテーブルと同じ数のファイルを読み取る必要があることを意味します。ただし、ハードディスクのヘッドを頻繁に動かすことは避けられません。
インタビュアー:つまり、ヘッドを頻繁に動かすとパフォーマンスに影響が出ますよね。
Me:はい、現在のオープンソース フレームワークは、hbase や kafka などのシーケンシャルな読み取りと書き込みによってパフォーマンスが大幅に向上したと言いたがりませんか
インタビュアー: そうです、それでは Linux がこれを最適化していると思いますか? ヒント、無料のコマンドをもう一度実行して確認してください
私:なぜキャッシュが 1.2G を超えるのか不思議です
画像ソース: https://www.linuxatemyram.com/
インタビュアー:
buff/cache が何に保存されているかについて考えたことはありますか?
バフ/キャッシュがこれほど多くのメモリを占有するのに、使用可能なメモリはあるのにまだ 1.1G あるのはなぜですか?
2 つのコマンドを使用して buff/cache によって占有されているメモリをクリアできるのに、プロセスを終了することによってのみ使用済みメモリを解放できるのはなぜですか?
私: 記憶を解放しますbuff/cache が何気なく占有しているということは、それが重要ではないことを意味しており、それをクリアしてもシステムの動作には影響しません
インタビュアー: 完全に真実ではありません
私: そうですか? 「CSAPP」(コンピュータシステムの詳細な理解)の文を思い出しました。
メモリ階層の本質は、ストレージデバイスの各層が下位層のデバイスのキャッシュであるということです
関連情報: http:/ /tldp.org /LDP/sag/html/buffer-cache.html
インタビュアー: これで採点の質問に答える方法がわかりました
#私:私….
##参加アルゴリズム
インタビュアー:
もう一度教えてください機会が与えられ、結合アルゴリズムを実装するように求められたらどうしますか?私:
インデックスがない場合、ネストされたループは終了します。インデックスがある場合は、index を使用してパフォーマンスを向上させることができます.
インタビュアー: join_buffer に戻りますが、join_buffer には何が保存されていると思いますか?
私: スキャン プロセス中に、データベースはテーブルを選択し、それを追加します。返され、他のテーブルと比較される必要があるデータは、join_buffer に置かれます。
インタビュアー: インデックスがある場合、どのように対処しますか?
私: これは比較的簡単です。2 つのテーブルのインデックス ツリーを直接読み取って比較するだけです。それで終わりです。ここでインデックス以外の処理方法を紹介しましょう
ネストされたループ結合
ブロック ブロック、つまり、I/O オーバーヘッドを削減するために毎回データがメモリにフェッチされます
MySQL InnoDB はインデックスを使用できない場合にこのアルゴリズムを使用します
次の 2 つのテーブル t_a と t_b を考慮してください
それが不可能な場合インデックスを使用して結合操作を実行すると、InnoDB はブロック ネスト ループ アルゴリズムを自動的に使用します。
概要
学校、データベースの先生 私はデータベース パラダイムを学ぶのが最も好きですが、仕事に就いて初めて、すべてがパフォーマンスに基づいている必要があることを学びました。冗長性が可能であれば、冗長性を使用します。冗長性が不可能な場合は、次の場合に参加してください。結合はパフォーマンスに大きな影響を与えます。 join_buffer_size を増やしてみるか、ソリッド ステート ドライブに変更してください。
参考資料
「コンピュータ システムを深く理解する」-第 6 章 メモリ階層
「Linux ディスクの実験と楽しみ」の著者キャッシュ" いくつかの例を使用して、ハードディスク キャッシュがプログラムの実行パフォーマンスに及ぼす影響を説明します。
《Linux がラムを食べました》フリー パラメータの説明
Linux でバッファ/ページ キャッシュ (ディスク キャッシュ) をクリアする方法コマンドは記事の冒頭にあります Explain
MySQL の実行方法: MySQL をルートから理解する
ブロック ベスト ループ MariaDB の公式ドキュメントでは、ブロック ネスト ループ アルゴリズムの実装について説明しています
以上がコード仕様では、SQL ステートメントに結合が多すぎないことが要求されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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