序文 セキュリティ部門からSQLインジェクションやXSS攻撃の脆弱性などに関する警告メールを頻繁に受け取ったり、時にはハッカーにコンピュータがハッキングされたりすることがあります。イライラしませんか?データベースの実行が遅すぎます (経験上、これは基本的にインデックスの誤った使用が原因です)。エディターに従って、MYSQL 初心者が犯す 11 の一般的な間違いを見てみましょう。 1. InnoDBの代わりにMyISAMを使用する MySQLには多くのデータベースエンジンがありますが、一般的にはMyISAMとInnoDBが使われます。 デフォルトでは MyISAM が使用されます。しかし、非常に単純なデータベースをセットアップしている場合や、単に実験している場合を除いて、ほとんどの場合、これは間違った選択です。 MyISAM は、データの整合性を確保するための本質である外部キー制約をサポートしていません。さらに、MyISAM はデータの追加や更新時にテーブル全体をロックするため、将来の拡張パフォーマンスに大きな問題が生じます。 解決策は簡単です。InnoDB を使用します。 2. PHPのmysqlメソッドを使用する PHP は当初から MySQL 関数ライブラリを提供してきました。多くのプログラムはmysql_connect、mysql_query、mysql_fetch_assocなどに依存していますが、 PHP マニュアルでは次のように提案されています: MySQL バージョン 4.1.3 以降を使用している場合は、mysqli 拡張機能を使用することを強くお勧めします。 mysqli (MySQL Advanced Extensions) にはいくつかの利点があります。 オブジェクト指向インターフェースを持つ 準備されたステートメント(前処理されたステートメントは、SQL インジェクション攻撃を効果的に防止し、パフォーマンスを向上させることができます) 複数のステートメントとトランザクションをサポート さらに、複数のデータベースをサポートする場合は、PDO を検討する必要があります。 3. ユーザー入力をフィルタリングしない 正しくは、「ユーザー入力を決して信頼しないでください」です。各入力情報を検証およびフィルタリングするにはバックエンド PHP を使用し、JAVAscript を信頼しないでください。次のような SQL ステートメントは簡単に脆弱になります。 $username = $_POST["名前"]; $password = $_POST["パスワード"]; $sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // クエリを実行... ユーザーがこのコードに「admin';」と入力すると、次のコードと同等になります。 usertable から userid を選択します。WHERE username='admin'; この方法では、侵入者はパスワードを入力せずに管理者としてログインできます。 4. UTF-8を使用していない 英国と米国のユーザーは言語の問題をほとんど考慮しないため、多くの製品が他の場所で使用できなくなります。 GBK でエンコードされたものもいくつかありますが、これもまた多くの問題を引き起こします。 UTF-8 は多くの国際化の問題を解決します。 PHP6 ではこの問題をより完璧に解決できますが、MySQL の文字セットを UTF-8 に設定することを妨げるものではありません。 5. SQLを使うべきところではPHPを使う MySQL を初めて使用する場合は、使い慣れた言語を使用して問題を解決することを検討する場合があります。これにより、無駄が生じ、パフォーマンスが低下する可能性があります。たとえば、平均を計算する場合、ネイティブの MySQL AVG() メソッドは使用されません。代わりに、PHP を使用してすべての値をループし、それらを合計して平均を計算します。 また、SQL クエリ内の PHP ループにも注意してください。通常、すべての結果が取得されたら、PHP で結果をループする方が効率的です。 一般的に、大量のデータを処理する際に強力なデータベース メソッドを使用すると、効率が向上します。 6. クエリを最適化しない PHP のパフォーマンスの問題の 99% はデータベースが原因です。不適切な SQL ステートメントにより、プログラム全体が非常に遅くなる可能性があります。 MySQL の EXPLAIN ステートメント、クエリ プロファイラ、その他多くのツールは、問題のある SELECT を見つけるのに役立ちます。 7. 間違ったデータ型の使用 MySQL は、数値、文字列、時刻などの一連のデータ型を提供します。日付を保存する場合は、DATE または DATETIME 型を使用します。整数または文字列を使用すると、状況が複雑になります。 場合によっては、シリアル化された PHP オブジェクトを文字列に格納する場合など、独自のデータ型を使用する必要があることがあります。データベースを追加するのは簡単かもしれませんが、MySQL は扱いにくくなり、後で問題が発生する可能性があります。 8. SELECTクエリで*を使用する テーブル内のすべてのフィールドを返すために * を使用しないでください。非常に遅くなります。必要なデータ フィールドのみを抽出する必要があります。すべてのフィールドを削除する必要がある場合は、テーブルを変更する必要がある可能性があります。 9. インデックス不足またはインデックス過剰 一般的に、SELECT ステートメントの WHERE の後に表示されるすべてのフィールドにインデックスを付ける必要があります。 たとえば、ユーザー テーブルに数値 ID (主キー) と電子メール アドレスがあるとします。ログイン後、MySQL は電子メールを通じて対応する ID を見つけるはずです。インデックスを使用すると、MySQL は検索アルゴリズムを通じて電子メールをすばやく見つけることができます。インデックスがない場合、MySQL はインデックスが見つかるまですべてのレコードをチェックする必要があります。 この場合、各フィールドにインデックスを追加したい場合がありますが、これを行うと、更新または追加時にインデックスがやり直され、データ量が多い場合にパフォーマンスの問題が発生します。したがって、必要なフィールドのみにインデックスを付けます。 10. バックアップをとらない 頻繁に発生することはないかもしれませんが、データベースの破損、ハード ドライブの障害、サービスの停止などにより、データに壊滅的な損害が発生する可能性があります。したがって、常にデータを自動的にバックアップするか、コピーを保存するようにしてください。 11. さらに: 他のデータベースを考慮しない MySQL は PHP で最も一般的に使用されるデータベースかもしれませんが、唯一の選択肢ではありません。 PostgreSQL と Firebird も競合相手ですが、どちらもオープンソースであり、特定の企業によって管理されていません。 Microsoft は SQL Server Express を提供し、Oracle は 10g Express を提供しており、これらのエンタープライズ レベルのものには無料バージョンもあります。 SQLite は、一部の小規模なアプリケーションや組み込みアプリケーションにも適しています。 要約する 上記がこの記事の全内容です。この記事の内容が、MySQL の学習や使用に携わる皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してご連絡ください。 以下もご興味があるかもしれません:
|
>>: Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法
データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...
私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...
目次ルーティングマネージャー背景はじめる問題を解決する方法要約するルーティングマネージャー各ジャンプ...
コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...
序文ご存知のとおり、デフォルトでは、Alibaba Cloud にインストールされている MySQL...
問題を解決するBootstrap は、次の問題を解決する CSS フレームワークです。デバイス間での...
問題の説明: ユーザーは、テーブルに「違反」という単語を含むフィールドが時々表示されることを要求して...
ページには多くのコントロール (要素またはタグ) があります。これらのタグをより便利に操作するには、...
ブロック要素p - 段落テキストの事前フォーマットテーブルol - ソートフォームul - 順序なし...
序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...
間違いNavicat Premium を使用して MySQL に接続すると、次のエラーが発生します。...
Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...
この記事では、Docker を使用して MySQL をデプロイし、データを保持する方法について簡単に...
序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...
目次1. まず、pycharmを使用してDjangoプロジェクトを作成し、関連する環境を設定します。...