序文 この記事では主に、MySQL のインデックスとビューの使用方法と違いを紹介し、参考と学習のために共有します。早速、詳しい紹介を見てみましょう。 索引 1. 概要 すべての MySQL 列タイプにインデックスを作成できます。 MySQL は、BTREE インデックス、HASH インデックス、プレフィックス インデックス、フルテキスト インデックス (FULLTEXT) [MyISAM エンジンでのみサポートされ、char、varchar、text 列に限定されます]、空間列インデックス [MyISAM エンジンでのみサポートされ、インデックス フィールドは空であってはなりません] をサポートしていますが、関数インデックスはサポートしていません。 MyISAM および InnoDB ストレージ エンジン テーブルは、デフォルトで BTREE インデックスを作成します。 2. インデックスを作成する インデックス作成の構文は次のとおりです。 [ユニーク|フルテキスト|空間]インデックスindex_nameを作成する [index_type を使用] tbl_name(index_col_name, ...); に対して インデックス列名: col_name [(長さ)] [昇順/降順] ALTER [IGNORE] テーブル tbl_name alter_specification [、alter_specification] ... 仕様の変更: ... ADD INDEX [インデックス名] [インデックスタイプ] (インデックス列名、...) ... 例: cityテーブルに10バイトのプレフィックスインデックスを作成します。 mysql> city(Name(10)) にインデックス cityName を作成します。 mysql> テーブル city を変更し、インデックス cityName(Name(10)) を追加します。 3. インデックスを表示する テーブルの現在のインデックスをすべて表示するには 4. インデックスを削除する tbl_name のインデックス index_name を削除します。 5. BTREEインデックスとHASHインデックス MEMORYストレージエンジンを持つテーブルでは、BTREEインデックスとHASHインデックスの使用を選択できます。 BTREE インデックス:
HASH インデックスの使用に関する注意事項: (HASH テーブルの制限に関連)
6. インデックス設計の原則 検索するインデックス列は、必ずしも選択される列とは限りません。インデックス作成に最も適した列は、SELECT ステートメントに表示される列ではなく、WHERE 句に表示される列です。 一意のインデックスを使用します。インデックス作成時に値を簡単に区別できる列を選択します。たとえば、誕生日の列にはさまざまな値があり区別しやすいのに対し、性別の列には M と F しかないため、誕生日のインデックスは性別のインデックスよりも適しています。この場合、インデックスはあまり役に立たず、各インデックスは行の約半分を返します。 短いインデックスを使用します。プレフィックスの長さは通常、文字列のプレフィックス インデックスに指定されます。ほとんどの値が最初の 10 ~ 20 文字の範囲内で一意である場合は、列全体をインデックスする必要はなく、最初の 10 ~ 20 文字をインデックスします。これにより、インデックス スペースが節約され、I/O 時間が短縮され、クエリの効率が向上します。 インデックスを過剰に作成しないでください。インデックスを追加するごとにスペースが余分に占有され、書き込み操作のパフォーマンスが低下します。テーブルが変更されると、インデックスを更新し、再構築する必要があり、インデックスの数が増えるほど、時間がかかります。さらに、MySQL は実行プランを生成する際にさまざまなインデックスを考慮します。冗長なインデックスがあると、クエリの最適化タスクがさらに困難になります。 ビュー 1. 概要 MySQL はバージョン 5.0.1 以降でビュー機能を提供しています。 ビューは、実際にはデータベースに存在しない仮想テーブルです。行と列のデータは、カスタム ビューのクエリで使用されるテーブルから取得され、ビューが使用されるときに動的に生成されます。 2. ビューを作成または変更する<br /> ビューを作成するには、 ビューを変更するために ビューを作成するための構文は次のとおりです。 作成 [または置換][アルゴリズム = {未定義|マージ|誘惑的}] ビュー view_name[(列リスト)] 選択ステートメントとして [[カスケード|ローカル]チェックオプション付き] ビュー構文を次のように変更します。 変更 [アルゴリズム = {未定義|マージ|誘惑可能}] ビュー view_name[(列リスト)] 選択ステートメントとして [[カスケード|ローカル]チェックオプション付き] MySQL では、ビュー定義にいくつかの制限があります。たとえば、from キーワードにはサブクエリを含めることができません。これは他のデータベースとは異なります。 3. ビューの更新可能性 ビューの更新可能性は、ビュー内のクエリの定義に関係します。次の種類のビューは更新できません。
たとえば、次のビューは更新できません -- 集計関数を含むmysql > ビューpayment_sumを作成または置換 -> staff_id、sum(金額) を選択 -> 支払いから -> staff_id でグループ化します。 -- 定数ビュー mysql> ビュー pi を作成または置換します -> 円周率として 3.1415926 を選択します。 -- サブクエリmysqlを含むを選択 > city_viewビューを作成 -> select ( city_id = 1 の city から city を選択);
4. ビューを削除する 一度に 1 つ以上のビューを削除できますが、ビューに対する削除権限が必要です。 ビューを削除 [存在する場合] view_name [,view_name] ... [制限|カスケード] たとえば、pay_viewビューを削除します。 mysql> ビュー pay_view1、pay_view2 を削除します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) 5. 表示 表示 MySQL バージョン 5.1 以降では、show tables コマンドはテーブル名だけでなくビュー名も表示します。ビューのみを表示する show views コマンドはありません。 同様に、次のコマンドでも表示できます。 テーブルの状態を表示 [db_name から] ['pattern' のように] 例 mysql> 'pay_view' のようなテーブルステータスを表示 \G ************************** 1. 行 **************************** 名前: pay_view エンジン: NULL バージョン: NULL 行形式: NULL 行: NULL 平均行長: NULL データ長: NULL 最大データ長: NULL インデックスの長さ: NULL データ空き: NULL 自動増分: NULL 作成時間: NULL 更新時間: NULL チェック時間: NULL 照合: NULL チェックサム: NULL 作成オプション: NULL コメント: 表示 セット内の 1 行 (0.00 秒) ビューの定義を表示する場合は、 例 mysql> 表示作成ビュー pay_view \G ************************** 1. 行 **************************** 表示: pay_view ビューの作成: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `pay_view` AS select `pay`.`pid` AS `pid`,`pay`.`amount` AS `amount` from `pay` where (`pay`.`amount` < 10) WITH CASCADED CHECK OPTION 文字セットクライアント: gbk 照合接続: gbk_chinese_ci セット内の 1 行 (0.00 秒) 最後に、システム テーブル 例 mysql> information_schema.views から * を選択します。ここで、table_name は 'pay_view' です \G ************************** 1. 行 **************************** TABLE_CATALOG: 定義 テーブル_スキーマ: mysqldemo テーブル名: ペイビュー VIEW_DEFINITION: `mysqldemo`.`pay`.`pid` AS `pid`,`mysqldemo`.`pay`.`amount` AS `amount` from `mysqldemo`.`pay` where (`mysqldemo`.`pay`.`amount` < 10) を選択します CHECK_OPTION: カスケード 更新可能: はい 定義者: root@localhost セキュリティタイプ: 定義者 文字セットクライアント: gbk 照合接続: gbk_chinese_ci セット内の1行(0.03秒) 質疑応答: MySQL ビューはインデックスを使用できますか? 答えは「はい」だと思います。インデックスはビュー上ではなく、ビューの背後にある実際のテーブル上に構築されます。 インデックスは、スキーマに格納されるデータベース オブジェクトです。インデックスの機能は、テーブル検索クエリの速度を上げることです。インデックスは、データをすばやく見つけるための高速アクセス方法であり、ディスクの読み取りおよび書き込み操作を削減します。インデックスはデータベース内のオブジェクトです。独立して存在することはできず、テーブル オブジェクトに依存する必要があります。 ビューは、1 つ以上のテーブルのクエリ結果です。データを保存できないため、仮想テーブルです。 参考文献 Tang Hanming 他、「MySQL in Simple Terms」、Posts and Telecommunications Press、2014 年 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: JavaScript でオブザーバー パターンを実装する方法
>>: CentOS7 に Redis をインストールして設定する方法
<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...
目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....
文字列を置き換えるには、次の形式を使用する必要があります。 $ sed s/置換対象文字列/置換文字...
導入: springboot プロジェクトを実行する Docker の構成は実は非常にシンプルで、L...
1.アルパインイメージをダウンロードする [root@docker43 ~]# docker pul...
現在の日付を照会する CURRENT_DATE() を選択します。 CURDATE() を選択する;...
弊社のネットワーク管理センターは管理センター兼サーバーとして機能します!各管理対象デバイスは、TCP...
1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...
Baota PanelのPHP7.3バージョンがZipArchiveをサポートしていないため、プログ...
序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...
この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...
半透明の境界線結果: 実装コード: <div> 半透明の境界線が見えますか? </...
序文効率的なSQL文の書き方は、Explain実行計画の分析と切り離せません。実行計画とは何か、効率...
この記事では、centos7 環境でバイナリ インストール パッケージを使用して mysql5.6 ...
序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...