検索

PHP mysqlの最適化

Apr 16, 2018 am 11:31 AM
mysqlphp最適化

この記事の内容は、特定の参考値を持つ PHP mysql の最適化に関するものです。必要な友達は参考にしてください

MySQL のヒント

    1。 SQL ステートメント内のキーワードは
  • 大文字 で記述するのが最適です。第 1 に、SQL ステートメントが実行されるときに、MySQL が大文字に変換して数値を増やすことができます。クエリの効率 (小さいとはいえ)。

  • 2. データベース内のデータ行を追加または削除すると、データ ID が大きすぎます。
  • ALTER TABLE tablename AUTO_INCREMENT=N, を使用して、N から始まる自動インクリメント ID を作成します。

  • 3.
  • ZEROFILL 属性を int 型に追加すると、データに 0 が自動的に追加されます

  • 4. 大量のデータをインポートする場合は、最初にインデックスを削除し、そうしないと、mysql はインデックスの更新に多くの時間を費やします。
  • 5. データベースを作成して SQL ステートメントを記述する場合、IDE で .sql という接尾辞が付いたファイルを作成できるため、IDE は SQL 構文を認識し、記述が容易になります。さらに重要なのは、データベースが失われた場合でも、このファイルを見つけて、現在のディレクトリで
  • /path/mysql -uusername -ppassword データベース名 を使用して、ファイル全体の SQL ステートメントを実行できることです。 -u と -p の後にはスペースを含まないユーザー名とパスワードが続きます)。



データベース設計の最適化1. データベース設計は 3 番目のパラダイムに準拠しており、クエリの便宜のためにある程度のデータの冗長性を持たせることができます。 2. データ型の優先順位を int > date, time > char > varchar > blob に置き換えることを検討できます。 ip2long() 関数を使用してストレージをタイプします。
3. char(n) 型の場合、データが完成したときに n の値をできるだけ小さく保つようにします。
4. テーブルを作成する場合、partition コマンドを使用して 1 つの

テーブル をパーティション化すると、クエリ効率が大幅に向上します。その中で、RANGE、LIST、HASH、KEY パーティション タイプが最もよく使用されます。パーティショニング方法は、 CREATE TABLE tablename { }ENGINE innodb/myisam CHARSET utf8 //データベースエンジンとエンコーディングを選択
PARTITION BY RANGE/LIST(column),//範囲と事前定義リストでパーティション分割
PARTITION partname VALUES LESS THAN / IN(n),// パーティションに名前を付け、パーティションのスコープを詳細に制限します
5. データベース エンジンを選択するときは、innodb と myisam の違いに注意してください

ストレージ構造: MyISAM はディスク上の 3 つのファイルに保存されます。 InnoDB のすべてのテーブルは同じデータ ファイル (通常は 2 GB) に保存されます。 トランザクション サポート: MyISAM はトランザクション サポートを提供しません。 InnoDB はトランザクション サポートを提供します。 テーブル ロックの違い: MyISAM はテーブル レベルのロックのみをサポートします。 InnoDB はトランザクションと行レベルのロックをサポートします。 フルテキスト インデックス: MyISAM は FULLTEXT タイプのフルテキスト インデックスをサポートしています (中国語には適用されないため、Sphinx フルテキスト インデックス エンジンを使用する必要があります)。 InnoDB はそれをサポートしていません。 テーブル内の特定の行数: MyISAM はテーブル内の総行数を保存し、count(*) のクエリは非常に高速です。 InnoDB はテーブル内の行の合計数を保存しないため、再計算する必要があります。
外部キー: MyISAM はサポートしていません。 InnoDB は





インデックスの最適化

1 をサポートしています。Innodb はインデックスを保存するときに主キーが必要です。指定されていない場合、エンジンは自動的に非表示の主キーを生成し、 を生成します。 プライマリインデックス 、プライマリキーの物理アドレスはインデックスに保存され、データはプライマリキーによって保存されます。インデックスを使用するたびに、まずプライマリインデックスを見つけてから、その下のデータを見つける必要があります。プライマリインデックス。
利点は、主キーによる検索が非常に高速であることです。欠点は、最初にセカンダリ インデックスを通じてプライマリ インデックスを見つける必要があるため、セカンダリ インデックスが遅くなるということです (セカンダリ インデックスはプライマリ インデックスの場所です)。 .)、プライマリ インデックスを通じてデータを検索します。また、主キーが不規則だと、新しい値を挿入する際に多くのデータブロックを移動する必要があり、効率に影響するため、主キーには定期的に増加するint型を使用するようにしてください。また、データは主キーの直後に配置されるため、データ内に特に大量のデータを含むカラム (テキスト/ブロブ) がある場合、InnoDB はクエリ中に多くのデータ ブロックをスキップし、これも速度低下の原因となります。

2. myisam のインデックスの各インデックスは同じで、ディスク上の各行のアドレスを指します。これらはすべて軽量のポインター データです。欠点は、各インデックスが主キーを介して確立されないことと、クエリがクラスター化インデックスで主キーを検索するほど高速ではないことです。ただし、アドレスが保存されているため、新しい値を挿入すると比較の側面が移動して変更されます。
3. 複数条件のクエリを実行する場合、複数の条件のインデックスを個別に作成する場合、SQL クエリを実行する場合、MySQL は使用するインデックスのみを選択します。そのため、複数条件のクエリが必要な場合は、結合インデックスを使用する必要があります。データの冗長性が生じる場合でも、確立されます。
結合インデックスのBTREE構築方法:最初の条件のインデックスを作成し、最初のインデックスのBTREE領域に2番目の条件のインデックスを作成する、というように、インデックスを使用する場合はとなります。最初の条件は必要ありません。 2 番目の条件はジョイントインデックスを使用しません。インデックスを使用する場合、条件は順序どおりに使用し、順番に使用する必要があります。
4. インデックスの長さもクエリに大きな影響を及ぼします。テストにはクエリ列
SELECT COUNT(DISTINCT LEFT(column)) / COUNT(*) を使用して構築する必要があります。列にインデックスを付ける さまざまな長さを選択する場合、インデックスの範囲はどれくらいですか? インデックスを作成するには、飽和に近い n 個の長さを選択します。 ALTER TABLE tablename ADD INDEX (column(n));特定の列の最初の n 文字。最初の n 文字が同じであれば、文字列を反転して保存し、インデックスを作成することもできます。
5. 頻繁な変更によるインデックスの断片化を維持する方法: ALTER TABLE tablename ENGINE oldengine; つまり、テーブル ストレージ エンジンを再度適用して、自動メンテナンスを有効にすることもできます。



データクエリの最適化 クエリがある場合は、データベースレベルでのデータ操作を実行しないようにし、代わりに PHP スクリプトに戻って操作します。データを圧縮してデータベースへの負担を軽減します。 データベースのパフォーマンスの問題が発見されたら、時間内に解決する必要があります。一般に、

Slow Queryログを使用して「遅い」クエリを記録し、EXPLAINを使用してクエリとインデックスの使用状況を分析し、を使用します。 PROFILE は、ステートメント実行中の特定のリソース消費を分析します。
スロークエリログ: 1. my.ini または my.cnf の [mysqld] に slow_query_log_file=/path を追加します // ログ保存パスを設定します
long_query_time=n // if ステートメントの実行時間を設定しますn秒に達すると記録されます
2. 次に、MySQLでSET throw_query_log='ON'を設定し、スロークエリを有効にします。
3. ログを記録した後、/bin/ ディレクトリ内の mysqldumpslow ファイル名を使用してログを表示します。一般的に使用されるパラメータは次のとおりです。
-g パターンは正規表現を使用します
-t n は最初の n 個のデータを返します
-s c/ t/l /r レコード数/時刻/クエリ時刻/返されたレコード数でソート

EXPLAIN文使用方法は、実行するクエリ文の前にEXPLAINを追加EXPLAIN SELECT * FROM user ;
結果は以下の通りです。 結果:

以下は各項目の説明です: id はクエリ文の ID です。複数のクエリが実行される場合、クエリの実行順序は意味がありません。
select-type は、simple/primary/union などの複数のクエリに対応する、実行されるクエリ ステートメントのタイプです。
tabel クエリ ステートメントによってクエリされたデータ テーブル


type 取得されるデータの一般的な型効率は、高いものから低いものまで、null>const>eq_ref>ref>range>index>allpossible-keys:indexes です。使用される可能性があるもの

key 使用されるインデックス key_len インデックスの長さ ref インデックスとともにテーブルから選択するために使用される列。


行数 データを見つけるためにスキャンされるおおよその行数を見つけます。すると、インデックスの品質を確認できます
追加 一般的なものは、データのクエリ後にファイルソートを使用してファイルを並べ替えます。これは遅く、インデックスを最適化する必要があります where を使用すると、データの行全体が読み取られ、フィルター処理が実行されて、where 条件を満たすかどうかが判断されます。インデックス インデックス カバレッジを使用すると、ターゲット データがすでにトラクションに格納されており、インデックスが作成されます。直接読み取られるため、非常に高速です。

PROFILE
PROFILEのオープンステータスを確認するには、SELECT @@frofilingを使用します。
有効になっていない場合は、SET profiling=1 を使用して有効にします。
これをオンにすると、MySQL はクエリ ステートメントの実行時にプロファイル情報を自動的に記録します。
すべての SQL 情報を表示するには、表示プロファイルを適用します。結果は、クエリ ID、時間、使用された SQL ステートメントの Query_ID 継続時間クエリの 3 列の結果です。
SHOW PFROFILE [
type[,type]][FOR QUREYQuery_ID][Limit rwo_count [OFFSET offset]]type を使用できます。一般的なものには、ALL (すべて) BLOCK IO (ディスプレイ IO 関連) が含まれますオーバーヘッド) CPU (CPU オーバーヘッド) MEMORY (メモリ オーバーヘッド) など


大規模ストレージの最適化
データベースのマスター/スレーブ レプリケーションと読み書き分離
1 マスターは変更を記録します。マスターサーバーのデータを複製するという目的を達成するために、マスターのバイナリがリレーログにコピーされ、データが独自のデータに戻されます。

マスター/スレーブ レプリケーションは、データベースの負荷分散、データベースのバックアップ、読み取り/書き込みの分離、その他の機能に使用できます。

2.マスターサーバーmasterを設定します
my.ini/my.confを変更します
[mysqld]
log-bin=mysql-bin //バイナリログを有効化します
server-id=102 //サーバーの一意のIDを設定します
3.スレーブサーバースレーブ
log-bin=mysql-bin //バイナリログを有効にする
server-id=226 //一意のサーバーID
4.マスターサーバー上でスレーブサーバーを認可します
GRANT REPLICATION SLAVE ON *.* to 'slavename' @'IP ' は 'root' によって識別されます
5.
を使用して、マスターを
に変更します。マスターからコピーされました。
設定を変更するたびにサーバーを再起動することを忘れないでください。その後、マスターサーバーとスレーブサーバーで show master/slave status を使用してマスター/スレーブのステータスを表示できます。
データベースでの読み取りと書き込みの分離を実現するには、mysql_proxy、atlas などの MySQL ミドルウェアに依存します。これらのミドルウェアをマスターサーバーとスレーブサーバーで読み取りと書き込みを分離するように構成することで、スレーブサーバーが読み取りを担当するようになり、マスターサーバーの負担が軽減されます。



データベースの共有


データベース内のデータテーブルのデータ量が非常に大きい場合、インデックス作成やキャッシュなど、データベースをシャーディングすることには大きな負担がかかります。クエリの負荷を軽減するために、複数のデータベース サーバーまたは複数のテーブル ストレージで使用されます。 方法には、垂直セグメンテーション、水平セグメンテーション、複合セグメンテーションが含まれます。
垂直セグメンテーション

: データテーブルが多数ある場合、データベース内で密接に関連するテーブル (同じモジュール、頻繁に接続およびクエリされるテーブルなど) を分割し、異なるマスター/スレーブサーバーに配置します。 水平セグメンテーション
: テーブルの数が少なく、テーブル内のデータ量が非常に多い場合、クエリを高速化するために、ハッシュやその他のアルゴリズムを使用してデータテーブルをいくつかに分割し、クエリを高速化するために、サーバー上でそれらを別々に配置します。水平シャーディングとデータテーブルパーティショニングの違いは、ストレージメディアの違いにあります。 結合分割
: 多くの場合、データ テーブルとテーブル内のデータ量が非常に大きいため、結合分割が必要になります。つまり、垂直方向と水平方向のテーブル分割が同時に実行されます。データベースは分散マトリックスに分割されて保存されます。 これらのデータベース最適化手法はそれぞれ、記事を書くために使用できます。これらの手法を理解して覚えておくと、必要に応じて目的を持った選択と最適化を行うことができ、データベースの効率を高めることができます。 関連する推奨事項:

PHP最適化セッションの使用法

PHP学習ルートとPHP最適化に関する10のヒント

以上がPHP mysqlの最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール