ホームページ データベース mysql チュートリアル MySQL パフォーマンスの最適化に関するある程度の経験

MySQL パフォーマンスの最適化に関するある程度の経験

Apr 18, 2019 am 09:40 AM
mysqlのパフォーマンスの最適化

クエリ用にクエリを最適化する

ほとんどの MySQL サーバーではクエリ キャッシュが有効になっています。これはパフォーマンスを向上させる最も効果的な方法の 1 つであり、MySQL データベース エンジンによって処理されます。同じクエリの多くが複数回実行されると、これらのクエリ結果はキャッシュに配置されるため、後続の同一のクエリではテーブルを操作する必要がなく、キャッシュされた結果に直接アクセスできます。

ここでの主な問題は、プログラマーにとって、この問題が見落とされやすいことです。クエリ ステートメントによっては MySQL がキャッシュを使用しなくなるためです。次の例を見てください:

// 查询缓存不开启
$r = mysql_query("SELECT username FROM user WHERE     signup_date >= CURDATE()");
// 开启查询缓存
$today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
ログイン後にコピー

上記 2 つの SQL ステートメントの違いは CURDATE() です。MySQL のクエリ キャッシュはこの関数では機能しません。したがって、NOW() や RAND() などの SQL 関数、またはその他の同様の関数では、クエリ キャッシュが有効になりません。これらの関数の戻り値は揮発性であるためです。したがって、必要なのは、MySQL 関数を変数に置き換えてキャッシュを有効にすることだけです。

EXPLAIN の使用方法を学ぶ

EXPLAIN キーワードを使用すると、MySQL が SQL ステートメントをどのように処理するかを知ることができます。

select id, title, cate from news where cate = 1
ログイン後にコピー

クエリが遅いことがわかった場合は、cate フィールドにインデックスを追加すると、クエリが高速化されます。

クエリが 1 行しかない場合は、LIMIT 1 を使用します。 data

テーブルをクエリするときに必要なデータが 1 つだけの場合があるため、制限 1 を使用してください。

インデックスを正しく使用する

インデックスは、必ずしも主キーや一意のフィールドに使用される必要はありません。テーブル内に検索、写真、条件に常に使用するフィールドがある場合は、そのフィールドのインデックスを作成してください。

ORDER BY RAND()

非常に非効率的なランダム クエリです。

SELECT を避ける *

データベースから読み取られるデータが増えるほど、クエリは遅くなります。また、データベースサーバーとWEBサーバーが独立した2台のサーバーの場合、ネットワーク通信の負荷も大きくなります。必要なものは何でも摂取する良い習慣を身につけなければなりません。

VARCHAR の代わりに ENUM を使用してください

ENUM 型は非常に高速でコンパクトです。実際には、TINYINT を保持しますが、文字列として表示されます。このようにして、このフィールドを使用して選択リストを作成するのが非常に完璧になります。

「性別」、「国」、「民族」、「ステータス」、「部門」などのフィールドがあり、これらのフィールドの値が制限され固定されていることがわかっている場合は、その場合は、VARCHAR の代わりに ENUM を使用する必要があります。

NOT NULL の使用

NULL 値を使用する特別な理由がない限り、フィールドは常に NOT NULL のままにしてください。これは少し物議を醸すかもしれませんが、読み続けてください。

まず第一に、「空」と「NULL」(INT の場合は 0 と NULL) の違いは何なのかを自問してください。両者に違いがないと思われる場合は、NULL を使用しないでください。 (ご存知ですか? Oracle では、NULL と空の文字列は同じです!)

NULL にはスペースは必要ありません。追加のスペースが必要です。比較すると、手順はさらに複雑になります。複雑な。もちろん、これは NULL を使用できないという意味ではなく、実際は非常に複雑であり、NULL 値を使用する必要がある状況が依然として存在します。

以下は MySQL 自身のドキュメントからの抜粋です。

「NULL 列には、その値が NULL かどうかを記録するために行に追加のスペースが必要です。MyISAM テーブルの場合、各 NULL 列は 1 ビット余分に必要です」

#IP アドレスは UNSIGNED INT として保存されます

多くのプログラマーは、VARCHAR(15) フィールドを作成して IP を整数の IP ではなく文字列の形式。整数を使用して格納する場合、必要なバイト数は 4 バイトだけであり、固定長フィールドを使用できます。さらに、これは、特に ip1 と ip2 の間の IP のような WHERE 条件を使用する必要がある場合に、クエリに利点をもたらします。

IP アドレスは 32 ビット符号なし整数全体を使用するため、UNSIGNED INT を使用する必要があります。

固定長テーブルの方が高速です

テーブル内のすべてのフィールドが「固定長」の場合、テーブル全体が「静的」または「固定長」とみなされます。たとえば、テーブルには VARCHAR、TEXT、BLOB 型のフィールドはありません。これらのフィールドのいずれかを含めている限り、テーブルは「固定長の静的テーブル」ではなくなり、MySQL エンジンは別の方法でテーブルを処理します。

固定長テーブルを使用すると、MySQL の検索が高速になるため、パフォーマンスが向上します。これらの固定長により、次のデータのオフセットの計算が容易になるため、読み取りも自然に高速になります。また、フィールドが固定長でない場合、次のフィールドを検索するたびに、プログラムは主キーを検索する必要があります。

また、固定長テーブルはキャッシュと再構築が容易です。ただし、唯一の副作用は、固定長フィールドは使用するかどうかに関係なく非常に多くのスペースを必要とするため、固定長フィールドによってスペースが浪費されることです。

垂直分割

「垂直分割」は、データベース内のテーブルを列ごとに複数のテーブルに変換する方法です。これにより、テーブルの複雑さとフィールドの数が軽減され、それによって最適化の目的が達成されます。この分割されたフィールドで構成されるテーブルを頻繁に結合しないと、分割していない場合よりもパフォーマンスが低下し、極端にパフォーマンスが低下することに注意してください。

大規模な DELETE または INSERT ステートメントを分割する

オンライン Web サイトで大規模な DELETE または INSERT クエリを実行する場合は、操作によって次のような問題が発生しないように十分に注意する必要があります。ウェブサイト全体が応答を停止します。これら 2 つの操作はテーブルをロックするため、テーブルがロックされると、他の操作は入力できなくなります。

Apache には多くの子プロセスまたはスレッドがあります。したがって、非常に効率的に動作し、サーバーは子プロセス、スレッド、データベース リンクが多すぎることを望まないため、多くのサーバー リソース、特にメモリが消費されます。

テーブルを 30 秒などの一定期間ロックすると、アクセス数が多いサイトでは、この 30 秒間にアクセス プロセス/スレッドが蓄積され、データベース リンクが開かれ、ファイルの数が多いと、WEB サービスがクラッシュするだけでなく、サーバー全体がすぐにハングアップする可能性があります。

列が小さいほど高速になります

ほとんどのデータベース エンジンでは、ハードディスク操作が最も大きなボトルネックになる可能性があります。したがって、データをコンパクトにすると、ハード ドライブへのアクセスが減るため、この状況では非常に役立ちます。

適切なストレージ エンジンの選択

MySQL には MyISAM と InnoDB という 2 つのストレージ エンジンがあり、それぞれのエンジンには長所と短所があります。

MyISAM は、多数のクエリを必要とするアプリケーションには適していますが、多数の書き込み操作にはあまり適していません。フィールドを更新するだけの場合でも、テーブル全体がロックされ、読み取り操作が完了するまで他のプロセス (読み取りプロセスであっても) が動作できなくなります。さらに、MyISAM は SELECT COUNT(*) などの計算が非常に高速です。

InnoDB の傾向は非常に複雑なストレージ エンジンになり、一部の小規模なアプリケーションでは MyISAM よりも遅くなるでしょう。もう 1 つの理由は、「行ロック」をサポートしているため、書き込み操作が多い場合に優れていることです。さらに、トランザクションなどのより高度なアプリケーションもサポートします。

以上がMySQL パフォーマンスの最適化に関するある程度の経験の詳細内容です。詳細については、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQL の接続速度を最適化するにはどうすればよいですか? MySQL の接続速度を最適化するにはどうすればよいですか? Jun 29, 2023 pm 02:10 PM

MySQL の接続速度を最適化するにはどうすればよいですか?概要: MySQL は、広く使用されているリレーショナル データベース管理システムであり、さまざまなアプリケーションでデータの保存と管理に一般的に使用されています。開発中、MySQL 接続速度の最適化はアプリケーションのパフォーマンスを向上させるために重要です。この記事では、MySQL の接続速度を最適化するための一般的な方法とテクニックをいくつか紹介します。目次: 接続プールを使用して、接続パラメータを調整し、ネットワーク設定を最適化する インデックスとキャッシュを使用して、長時間アイドル状態の接続を回避する 適切なハードウェア リソースを構成する 概要: 接続プールを使用する

MySQL データベースのバックアップとリカバリのパフォーマンスの最適化に関するプロジェクトの経験の分析 MySQL データベースのバックアップとリカバリのパフォーマンスの最適化に関するプロジェクトの経験の分析 Nov 02, 2023 am 08:53 AM

現在のインターネット時代では、データの重要性は自明のことです。インターネット アプリケーションの中核コンポーネントの 1 つとして、データベースのバックアップとリカバリ作業は特に重要です。しかし、データ量が増加し続け、ビジネス要件がますます複雑になるにつれて、従来のデータベースのバックアップおよびリカバリ ソリューションでは、最新のアプリケーションの高可用性と高パフォーマンスの要件を満たすことができなくなりました。したがって、MySQL データベースのバックアップおよびリカバリのパフォーマンスの最適化は、解決する必要がある緊急の問題となっています。実際に、私たちは MySQL データを効果的に改善するために一連のプロジェクトの経験を採用しました。

MySQL パフォーマンス最適化実践ガイド: B+ ツリー インデックスの深い理解 MySQL パフォーマンス最適化実践ガイド: B+ ツリー インデックスの深い理解 Jul 25, 2023 pm 08:02 PM

MySQL パフォーマンス最適化実践ガイド: B+ ツリー インデックスの詳細な理解 はじめに: MySQL は、オープン ソースのリレーショナル データベース管理システムとして、さまざまな分野で広く使用されています。しかし、データ量が増加し続け、クエリ要件がより複雑になるにつれて、MySQL のパフォーマンスの問題がますます顕著になってきています。その中でも、インデックスの設計と使用は、MySQL のパフォーマンスに影響を与える重要な要素の 1 つです。この記事では、B+ ツリー インデックスの原理を紹介し、実際のコード例を使用して MySQL のパフォーマンスを最適化する方法を示します。 1. B+ ツリーインデックスの原理 B+ ツリーは

PHP の PDO クラスを使用して MySQL のパフォーマンスを最適化する方法 PHP の PDO クラスを使用して MySQL のパフォーマンスを最適化する方法 May 10, 2023 pm 11:51 PM

インターネットの急速な発展に伴い、MySQL データベースは多くの Web サイト、アプリケーション、さらには企業にとっても中核となるデータ ストレージ テクノロジになりました。しかし、データ量の継続的な増加と同時アクセスの急激な増加により、MySQL のパフォーマンスの問題がますます顕著になってきました。 PHP の PDO クラスは、その効率的で安定したパフォーマンスのため、MySQL の開発と運用でも広く使用されています。この記事では、PDO クラスを使用して MySQL のパフォーマンスを最適化し、データベースの応答速度と同時アクセス能力を向上させる方法を紹介します。 1. PDOクラスの紹介

動的 SQL ステートメントを使用して MySQL のパフォーマンスを向上させる方法 動的 SQL ステートメントを使用して MySQL のパフォーマンスを向上させる方法 May 11, 2023 am 09:28 AM

最新のアプリケーションでは、MySQL データベースが一般的に選択されます。ただし、データ量が増加し、ビジネス ニーズが変化し続けると、MySQL のパフォーマンスが低下する可能性があります。 MySQL データベースの高いパフォーマンスを維持するために、動的 SQL ステートメントは MySQL のパフォーマンスを向上させる重要な技術的手段となっています。動的 SQL ステートメントとは何ですか? 動的 SQL ステートメントとは、アプリケーション内のプログラムによって SQL ステートメントを生成する技術を指し、平たく言えば、SQL ステートメントを文字列として扱うことを意味します。大規模なアプリケーションの場合、

MySQL パフォーマンスの最適化:TokuDB エンジンの機能と利点をマスターする MySQL パフォーマンスの最適化:TokuDB エンジンの機能と利点をマスターする Jul 25, 2023 pm 07:22 PM

MySQL パフォーマンスの最適化:TokuDB エンジンの特徴と利点をマスターする はじめに:大規模なデータ処理アプリケーションでは、MySQL データベースのパフォーマンスの最適化は重要なタスクです。 MySQL はさまざまなエンジンを提供しており、それぞれに異なる機能と利点があります。この記事では、TokuDB エンジンの機能と利点を紹介し、読者が TokuDB エンジンをよりよく理解し、適用できるようにいくつかのコード例を示します。 1. トクDBエンジンの特徴 トクDBは、高性能・高圧縮率のストレージエンジンです。

テーブルを垂直に分割して MySQL のパフォーマンスを向上させる方法 テーブルを垂直に分割して MySQL のパフォーマンスを向上させる方法 May 10, 2023 pm 09:31 PM

インターネットの急速な発展に伴い、データの規模は拡大し続けており、データベースのストレージとクエリの効率に対する需要も高まっています。最も一般的に使用されているオープン ソース データベースとして、MySQL のパフォーマンスの最適化は常に開発者の焦点となってきました。この記事では、MySQL の効果的なパフォーマンス最適化テクノロジである垂直パーティション テーブルを紹介し、その実装と適用方法を詳しく説明します。 1. 垂直パーティションテーブルとは何ですか?垂直パーティションテーブルとは、列の特性に従ってテーブルを分割し、クエリ効率を向上させるために異なる物理ストレージデバイスに異なる列を格納することを指します。

MySQL でのデータテーブルのサイズ管理スキル MySQL でのデータテーブルのサイズ管理スキル Jun 15, 2023 am 09:28 AM

MySQL データベースは、軽量のリレーショナル データベース管理システムとして、インターネット アプリケーションやエンタープライズ レベルのシステムで広く使用されています。エンタープライズレベルのアプリケーションでは、データ量の増加に伴い、データテーブルのサイズも増加し続けるため、データベースのパフォーマンスと信頼性を確保するには、データテーブルのサイズを効果的に管理することが重要です。この記事では、MySQL におけるデータ テーブルのサイズ管理テクニックを紹介します。 1. データテーブルの分割 データ量が増加し続けると、データテーブルのサイズも増加し続けるため、データベースのパフォーマンスが低下し、クエリ操作が遅くなります。

See all articles