ホームページ バックエンド開発 PHPチュートリアル PHP 開発者がよく犯す MySQL の 10 個の間違いの分析と修正_PHP チュートリアル

PHP 開発者がよく犯す MySQL の 10 個の間違いの分析と修正_PHP チュートリアル

Jul 21, 2016 pm 03:21 PM
innodb myisam mysql php いいえ 使用 分析する 開発者 正しい 間違い

1. InnoDB の代わりに MyISAM を使用する

完全に間違っています、反論の理由:

まず第一に、元の記事では MyISAM がデフォルトで使用されると述べていますが、実際には MySQL 5.5.x では InnoDB がデフォルトのテーブルになっています。エンジン。

さらに、単に InnoDB を使用するだけではすべての問題が解決されるわけではありません。場合によっては、アプリケーションのパフォーマンスが 10%、あるいは 40% 低下する可能性もあります。

フォーラムセクションテーブル、ニュース分類テーブル、各種コードテーブル、その他長時間運用されないテーブルなど、特定のビジネスに対応するのが最善の方法ですが、それでも優れたパフォーマンスを持つMyISAMエンジンを使用する必要があります。

ユーザー、アカウント、パイプラインなど、データの整合性とタイミングが厳密に要求されるトランザクション処理を必要とするものには、InnoDB エンジンを使用する必要があり、アプリケーションもトランザクション処理メカニズムをうまく活用する必要があります。もちろん、トランザクション処理は必然的に大幅なパフォーマンスの低下をもたらしますが、これは単純な同時実行性の高いアプリケーションでは必要です。

最後に、外部キー制約はパフォーマンスに重大な影響を与えるため、一般にパブリック Web インターネット アプリケーションでは使用されません。データの整合性は、依然としてプログラマー、またはアプリケーション アーキテクチャ自体の堅牢性に依存して維持されています。正式な 3 番目のパラダイムは、企業の内部 MIS システムおよび 12306 などの Web サイトでのみ使用されます。

2. PHP の mysql メソッドを使用する

完全に間違っているわけではありませんが、適切に選択する必要があります:

Mysqli は優れていますが、すべてのサーバーが PHP 用の mysqli サポートをコンパイルしているわけではありません。

アプリケーションが自分でデプロイしたサーバーのみを使用することが決定でき、アプリケーションが完全に自分で開発されている場合は、mysqli が最適な選択です。

しかし、アプリケーションが仮想ホストにデプロイされる可能性が高い場合、または他の人(分散プロジェクトなど)によってデプロイされる可能性が高い場合は、MySQL 関数セットを正直に使用し、適切にカプセル化するか、SQL インジェクションを防ぐために成熟したフレームワークを使用することをお勧めします。 。

3. ユーザー入力をフィルタリングしない

言うまでもなく、これは MagicQuote または成熟したフレームワークのいずれかです。 SQL インジェクションは古いトピックです。

4. UTF-8 を使用しないでください

ほとんどの場合、そうですが、次のことも慎重に考慮する必要があります:

UTF-8 の 1 文字は 3 バイトを占有するため、他のファイルよりも大きいことを知っておく必要があります。 GBK などのエンコーディングは 33%。つまり、同じ Web ページが UTF-8 エンコードで 100KB である場合、GBK エンコードでは 66KB にしかならないということです。したがって、PHP が UTF-8 を使用するように決定されている場合でも、フロントエンド ページは状況に応じて必要なエンコーディングを選択する必要があります。ただし、PHP が UTF-8 を使用し、フロントエンド テンプレートが GBK で、テンプレート エンジンが強力でない場合は、トランスコーディング作業で十分です。したがって、単純に UTF-8 を選択するのではなく、必要なエンコーディングを使用するようにしてください。

最後の文: UTF-8 では strlen("I")=3、GBK では strlen("I")=2

5. SQL を使用する必要がある場合は PHP を使用する

適宜検討してください。 :

たとえば、登録時間と投稿時間の効果を実現するためにテーブルを作成するときに、デフォルト値として CURRENT_TIMESTAMP を入力することに慣れている人もいます。 または、時刻判定 SQL 文に SELECT x FROM tab1 WHERE regdate のように記述します。MySQL の時刻関数を使用せず、アプリケーション内で時刻を計算するのが正しい方法です。分散アプリケーションの場合、時刻を均一に管理するためにタイムサーバーが必要です。

記事内で言及されている MySQL 数学関数の一部も注意して使用する必要があります。大規模なアプリケーションでは、データベースへの負担が最も大きくなることが多く、複雑な WHERE ステートメントがクエリ速度の低下の原因となるためです。したがって、計算はコア データベースではなく、グローバルな安定性に影響を与えない安価なアプリケーション サーバーにできるだけ配置する必要があります。

6. クエリを最適化していない

言うまでもなく、大規模なアプリケーションでは、2 つのクエリを記述した場合でも、PHP を使用してデータをマージできます。

7. 間違ったデータ型の使用

INT、TinyINT、VARCHAR、CHAR、TEXT などのフィールド型を適切に選択することに問題はありません。

Date、DateTime、TIMESTAMP の 3 つの型は大規模なアプリケーションでは使用できません。代わりに INT(10) UNSIGNED を使用する必要があります。

1つはパフォーマンス、もう1つはアプリケーション、特にPHPにとってUNIX_TIMESTAMPタイムスタンプを変換するのに非常に便利であるということです。 Date を使用してさまざまな時刻形式を出力するのは面倒です。

8. SELECT クエリで * を使用する



9. インデックスが不十分または過剰である

インデックスは必要ですが、インデックスによってクエリを解決できない場合は、memcache または nosql ソリューションを検討してください。

10. バックアップはありません

これは作者が数字をでっち上げているだけですか?

11. さらに: 他のデータベースは考慮されていません

これは全く正しいです。アプリケーションでは、アプリケーション用に他のデータベースを選択するだけでなく、特定のビジネス タイプに対して同じアプリケーション内で複数のデータベースを並行して使用することも必要です。データベースでなくても、その他のさまざまなキャッシュ、メモリストレージ、その他のソリューションであっても。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/324881.html技術記事 1. InnoDB の代わりに MyISAM を使用するのは完全に間違っています。 反論の理由: まず、元の記事では MyISAM がデフォルトで使用されると述べていますが、実際には MySQL 5.5.x では InnoDB がデフォルトのテーブル エンジンになっています。 あと…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

CakePHP の役立つリソース CakePHP の役立つリソース Sep 10, 2024 pm 05:27 PM

次のリソースには、CakePHP に関する追加情報が含まれています。より深い知識を得るためにぜひご活用ください。

See all articles