ホームページ データベース mysql チュートリアル SQL データ操作の基礎 (中級) 6

SQL データ操作の基礎 (中級) 6

Dec 17, 2016 pm 02:33 PM

第 10 章「SQL の基礎」では、SQL の予備的な概要を説明します。 SELECT ステートメントを使用してクエリを実行する方法と、独自のテーブルを作成する方法を学習しました。この章では、SQL についての知識を深めます。クエリを高速化するためにインデックスを作成する方法を学びます。また、より多くの SQL ステートメントと関数を使用してテーブル内のデータを操作する方法も学習します。

インデックス作成

この本の中で特定の文を見つけたいとします。ページごとに検索することもできますが、非常に時間がかかります。また、この本の索引を使用すると、探しているトピックをすぐに見つけることができます。

表の索引は、本の後ろに付いている索引とよく似ています。これにより、クエリの速度が大幅に向上します。大きなテーブルの場合、インデックスを追加すると、通常は完了までに数時間かかるクエリがわずか数分で完了します。したがって、頻繁なクエリを必要とするテーブルにインデックスを追加する理由はありません。

注:

メモリ容量またはハードディスク容量が不十分な場合は、テーブルにインデックスを追加したくない場合があります。インデックスを含むデータベースの場合、SQL サーバーにはかなりの追加スペースが必要です。たとえば、クラスター化インデックスを作成するには、約 1.2 倍のデータ サイズが必要です。データベース内でテーブル インデックスが占める領域の量を確認するには、システム ストアド プロシージャ sp_spaceused を使用し、インデックス付けされるテーブルの名前としてオブジェクト名を指定します。

クラスター化索引と非クラスター化索引

この本の索引から文のページ番号を見つけたと仮定します。ページ番号がわかると、正しいページ番号が見つかるまで本を読み進めることになるでしょう。ランダムに検索すると、最終的に正しいページ番号に到達することができます。ただし、ページ番号を見つけるにはもっと効率的な方法があります。

まず、本を半分くらいめくってください。探しているページ番号が半分のページ番号より小さい場合は、本を4分の3までめくってください。方法。 。こうすることで、正しいページ番号に近いページが見つかるまで、本をさらに小さな部分に分割し続けることができます。これはページを見つけるのに非常に効果的な方法です。

SQL サーバーのテーブル インデックスも同様に機能します。テーブル インデックスは、ツリー構造を形成する一連のページで構成されます。ルート ページは、他の 2 つのページを指すことにより、テーブルのレコードを論理的に 2 つの部分に分割します。ルート ページが指す 2 つのページは、レコードをより小さな部分に分割します。各ページは、リーフレベルのページに到達するまで、レコードをより小さなパーティションに分割します。

インデックスには、クラスター化インデックスと非クラスター化インデックスの 2 種類があります。クラスター化インデックスでは、インデックス ツリーのリーフ レベルのページに実際のデータが含まれます。レコードのインデックス順序は物理的な順序と同じです。ノンクラスタード インデックスでは、リーフ レベルのページがテーブル内のレコードを指します。レコードの物理的な順序は、必ずしも論理的な順序に関連しているわけではありません。

クラスター化インデックスはディレクトリ テーブルに非常によく似ており、ディレクトリ テーブルの順序は実際のページ番号の順序と一致します。非クラスター化インデックスは、書籍の標準的なインデックス テーブルに似ています。通常、インデックス テーブル内の順序は実際のページ番号の順序と一致しません。書籍には複数の索引がある場合があります。たとえば、件名インデックスと作成者インデックスの両方が含まれる場合があります。同様に、テーブルには複数の非クラスター化インデックスを含めることができます。

通常はクラスター化インデックスを使用しますが、両方のタイプのインデックスの長所と短所を理解しておく必要があります。

テーブル内のレコードは 1 つの物理的な順序でのみ保存できるため、各テーブルには 1 つのクラスター化インデックスのみを含めることができます。通常、識別フィールドに基づいてテーブルにクラスター化インデックスを作成する必要があります。ただし、文字フィールド、数値フィールド、日時フィールドなど、他のタイプのフィールドに対してクラスター化インデックスを作成することもできます。

クラスター化インデックスを使用したテーブルからのデータの取得は、非クラスター化インデックスを使用したテーブルよりも高速です。特定の範囲内のデータを取得する必要がある場合は、非クラスター化インデックスよりもクラスター化インデックスを使用する方が適しています。たとえば、テーブルを使用してサイトの訪問者のアクティビティを記録するとします。一定期間内のログイン情報を取得したい場合は、このテーブルの DATETIME 型フィールドにクラスター化インデックスを作成する必要があります。

クラスター化インデックスの主な制限は、テーブルごとにクラスター化インデックスを 1 つだけ作成できることです。ただし、テーブルには複数の非クラスター化インデックスを含めることができます。実際、テーブルごとに最大 249 個の非クラスター化インデックスを作成できます。テーブルにクラスター化インデックスと非クラスター化インデックスを同時に作成することもできます。

サイトのアクティビティ ログから日付だけでなくユーザー名にも基づいてデータを取得したいとします。この場合、クラスタードインデックスとノンクラスタードインデックスを同時に作成すると効果的です。 datetime フィールドにクラスター化インデックスを作成し、ユーザー名フィールドに非クラスター化インデックスを作成できます。さらに多くのインデックス作成方法が必要な場合は、非クラスター化インデックスをさらに追加できます。

非クラスター化インデックスには、大量のハード ディスク領域とメモリが必要です。さらに、非クラスター化インデックスを使用すると、 また、テーブルへのデータの挿入および更新の速度も低下します。非クラスター化インデックスを持つテーブルのデータを変更する場合は、必ずインデックスも更新する必要があります。したがって、テーブルに非クラスター化インデックスを作成する場合は、慎重に検討する必要があります。テーブルでデータを頻繁に更新する必要があることが予想される場合は、そのテーブルに非クラスター化インデックスを作成しすぎないでください。さらに、ハード ディスクとメモリのスペースが限られている場合は、使用する非クラスター化インデックスの数も制限する必要があります。

インデックス プロパティ

これら 2 種類のインデックスには 2 つの重要なプロパティがあります。どちらのタイプも同時に複数のフィールドにインデックスを付けることができます (複合インデックス)。両方のタイプのインデックスを一意のインデックスとして指定できます。

複数のフィールドに対して複合インデックスを作成したり、複合クラスター化インデックスを作成したりすることもできます。 Web サイトへの訪問者の姓名を記録するテーブルがあるとします。完全な名前に基づいてテーブルからデータを取得する場合は、姓フィールドと名前フィールドの両方にインデックスを作成する必要があります。これは、2 つのフィールドに個別のインデックスを作成することとは異なります。複数のフィールドを同時にクエリする場合は、複数のフィールドにインデックスを作成する必要があります。各フィールドを個別にクエリする場合は、フィールドごとに独立したインデックスを作成する必要があります。

どちらのタイプのインデックスも一意のインデックスとして指定できます。フィールドに一意のインデックスが付いている場合、フィールドに重複した値を入力することはできません。識別フィールドは自動的に一意の値フィールドになりますが、他の種類のフィールドに一意のインデックスを作成することもできます。テーブルを使用してサイトのユーザー パスワードを保存するとします。2 人のユーザーが同じパスワードを使用することは絶対に望ましくありません。フィールドを強制的に一意の値フィールドにすることで、この問題の発生を防ぐことができます。


上記は SQL データ操作の基礎 (中級) 6 の内容です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

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

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

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

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

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

SQL の ID 属性は何を意味しますか? SQL の ID 属性は何を意味しますか? Feb 19, 2024 am 11:24 AM

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

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

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

SQL の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

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

PHP を使用してバッチ処理とデータ バッチ操作を実装する方法 PHP を使用してバッチ処理とデータ バッチ操作を実装する方法 Sep 06, 2023 am 10:46 AM

PHP を使用してバッチ処理とデータのバッチ操作を実装する方法 Web アプリケーションの開発過程では、複数のデータを同時に処理する必要がある状況によく遭遇します。効率を向上させ、データベース リクエストの数を減らすために、PHP を使用してバッチ処理とデータ バッチ操作を実装できます。この記事では、PHP を使用してこれらの機能を実装する方法を紹介し、参考用のコード例を添付します。データのバッチ処理 大量のデータに対して同じ操作を実行する必要がある場合、PHP のループ構造を使用してバッチ処理を行うことができます。

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? Dec 17, 2023 am 08:41 AM

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

See all articles