ホームページ データベース mysql チュートリアル mysql连接查询中索引的重要性_MySQL

mysql连接查询中索引的重要性_MySQL

Jun 01, 2016 pm 01:01 PM
索引 重要性

在mysql中,我们要从多张表中读取数据时,往往需要用到连接查询。连接查询通过两张表中符合连接关系的字段来建立两张表的关联,通常包括内连接、左外连接、右外连接和全连接。内连接会保留两张表中共有的那部分记录,因此最后产生的连接表记录数最少;全连接会保留两张表中所有的记录,因此最后产生的连接表记录数最多;而左外连接会保留左表的全部记录,右外连接会保留右表的全部记录,因此最后产生的连接表记录数处于内连接和外连接之间。

下面我们以一个学生选课的例子,来分析下左外连接的性能。

首先定义一张学生表(student):\

插入学生记录,共10000条:
\\

然后定义一张学生选课表(student_to_class):\\

插入学生选课记录,每个学生选择2门课,共20000条记录:\\

现在我们要统计每个学生的个人信息,包括他的姓名和他选择的课程数,这样我们需要使用左外连接,具体SQL如下:

SELECT
	a.student_id, student_name, count(*)
FROM
	student a
LEFT JOIN student_to_class b ON a.student_id = b.student_id
GROUP BY a.student_id;
ログイン後にコピー
但是,这个查询的执行速度非常慢,花费了75.467s,当然这与我在本机,而不是在服务器上搭建数据库也有关系,可这样的查询效率肯定不能忍受。

下面我们来分析一下为什么这么慢:

首先用explain查看这个语句的查询执行计划,可以看到type都为ALL,即在student表和student_to_class表中都使用的全表扫描,其中student表(a)中扫描了10649行,student_to_class表(b)中扫描了20287行,这样无疑效率是非常低的。\\

对此,我们试着给student_to_class表的student_id字段添加索引:\\

然后再次执行查询,发现速度非常快,只有0.077s,改进得非常多。而相应的查询执行计划如下图所示,发现在查询student_to_class表时使用了索引student_index,使得只需要扫描1行就行了,相当于原来的两万分之一,这就是效率改进的关键点所在。\\

因此,当连接查询时产生的连接表过大时,为了防止查询次数过多,我们要经常使用索引来减少查询次数,提高查询效率。

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

Oracle のインデックス タイプとは何ですか? Oracle のインデックス タイプとは何ですか? Nov 16, 2023 am 09:59 AM

Oracle インデックス タイプには次のものがあります: 1. B ツリー インデックス、2. ビットマップ インデックス、3. 関数インデックス、4. ハッシュ インデックス、5. 逆キー インデックス、6. ローカル インデックス、7. グローバル インデックス、8. ドメイン インデックス、9.ビットマップ接続インデックス、10. 複合インデックス。詳細な紹介: 1. B ツリー インデックスは、同時操作を効率的にサポートできる自己分散ツリー データ構造です。Oracle データベースでは、B ツリー インデックスが最も一般的に使用されるインデックス タイプです。2. ビット グラフ インデックスは、インデックス タイプ ベースです。ビットマップアルゴリズムなどについて。

Linux バックアップの重要性と必要性​​を理解する Linux バックアップの重要性と必要性​​を理解する Mar 19, 2024 pm 06:18 PM

タイトル:Linuxバックアップの重要性と必要性​​を徹底解説 情報化時代の今日、データの重要性と価値がますます顕著となり、サーバーやパソコンで広く使われているOSとしてLinuxが注目を集めています。データセキュリティの観点から。 Linux システムを日常的に使用していると、データの損失やシステムのクラッシュなどの問題が避けられず、その際にはバックアップが特に重要になります。この記事では、Linux バックアップの重要性と必要性​​を詳しく掘り下げ、特定のコード例と組み合わせてバックアップの実装を説明します。

インデックスが配列の制限を超える問題の解決方法 インデックスが配列の制限を超える問題の解決方法 Nov 15, 2023 pm 05:22 PM

解決策は次のとおりです。 1. インデックス値が正しいかどうかを確認します。まず、インデックス値が配列の長さの範囲を超えていないかどうかを確認します。配列のインデックスは 0 から始まるため、インデックスの最大値は配列の長さから 1 を引いた値になります。 2. ループ境界条件を確認します。ループ内で配列アクセスにインデックスを使用する場合は、ループ境界条件が正しいことを確認してください。 ; 3. 配列の初期化: 配列を使用する前に、配列が正しく初期化されていることを確認してください; 4. 例外処理の使用: プログラム内で例外処理メカニズムを使用して、インデックスが配列の境界を超えるエラーをキャッチできます。 、それに応じて処理してください。

インデックスを使用して、PHP および MySQL でのデータのグループ化とデータ集約の効率を向上させるにはどうすればよいでしょうか? インデックスを使用して、PHP および MySQL でのデータのグループ化とデータ集約の効率を向上させるにはどうすればよいでしょうか? Oct 15, 2023 am 11:39 AM

インデックスを使用して、PHP および MySQL でのデータのグループ化とデータ集約の効率を向上させるにはどうすればよいでしょうか?はじめに: PHP と MySQL は現在最も広く使用されているプログラミング言語およびデータベース管理システムであり、Web アプリケーションの構築や大量のデータの処理によく使用されます。データのグループ化とデータの集計は、大量のデータを処理する際の一般的な操作ですが、インデックスが適切に設計および使用されていない場合、これらの操作は非常に非効率になる可能性があります。この記事では、PHP と MySQL でのデータのグループ化と集計の効率を向上させ、パフォーマンスを向上させるためのインデックスの使用方法を紹介します。

PHPは、別の文字列内の文字列の開始位置から終了位置までの文字列を返します。 PHPは、別の文字列内の文字列の開始位置から終了位置までの文字列を返します。 Mar 21, 2024 am 10:31 AM

この記事では、PHP がどのようにして、別の文字列内の文字列の開始位置から終了位置まで文字列を返すかを詳しく説明します。非常に実用的であると編集者が考えたので、参考として共有します。この記事. この記事から何かを得ることができます。 PHP で substr() 関数を使用して、文字列から部分文字列を抽出します。substr() 関数は、文字列から指定された範囲内の文字を抽出できます。構文は次のとおりです。 substr(string,start,length) ここで、 string: 部分文字列が抽出される元の文字列。 start: 部分文字列の開始位置のインデックス (0 から始まります)。 length (オプション): 部分文字列の長さ。指定されていない場合は、

len 関数の意味とプログラミングにおけるその重要な役割をマスターする len 関数の意味とプログラミングにおけるその重要な役割をマスターする Dec 28, 2023 am 10:45 AM

Len 関数の機能とプログラミングにおけるその重要性を理解するには、具体的なコード例が必要です。プログラミング言語では、len 関数は非常に一般的に使用される関数であり、文字列、リストなどのデータ型の長さや要素数を取得するために使用されます。 、およびタプルの番号。 len 関数の機能は非常に単純ですが、プログラミングにおけるその重要性は無視できません。この記事では、len 関数の具体的な機能とプログラミングにおけるその応用を紹介し、具体的なコード例をいくつか示します。 1. len 関数の機能 len 関数は、オブジェクトの長さや要素数を取得するために使用します。

Python のスライスとインデックス作成の高度なアプリケーション: 隠れた関数を明らかにし、プログラミングの無限の可能性を探求します。 Python のスライスとインデックス作成の高度なアプリケーション: 隠れた関数を明らかにし、プログラミングの無限の可能性を探求します。 Feb 19, 2024 pm 08:40 PM

Python でのスライスの基本構文は、スライス操作に [start:end:step] 構文を使用することです。ここで、start はスライスの開始位置を表し、end はスライスの終了位置を表し、step はスライス ステップを表します。 start が省略された場合、リストまたは文字列の先頭からスライスされることを意味します。end が省略された場合、リストまたは文字列の最後までスライスされることを意味します。step が省略された場合、ステップ サイズが 1 であることを意味します。例: my_list=[1,2,3,4,5]#2番目の要素から4番目の要素までをカット(4番目の要素を除く) sub_list=my_list[1:4]#[2,3,4 ]#Start最初の要素からリストの終わりまで sub_li

MySQL 接続番号の概念と重要性についての深い理解 MySQL 接続番号の概念と重要性についての深い理解 Mar 16, 2024 am 10:27 AM

MySQL は、一般的に使用されるリレーショナル データベース管理システムとして、Web 開発の分野で広く使用されています。 MySQL を使用する場合、重要な概念は接続数です。この記事では、MySQL 接続番号の概念とその重要性を詳しく掘り下げ、具体的なコード例で説明します。 1. MySQL 接続数の概念 MySQL では、接続数とは、MySQL サーバーに同時に接続するクライアントの数を指します。クライアントが MySQL サーバーとの接続を確立すると、多数の接続が占有されます。私の

See all articles