MySQL SQL优化的索引问题详解
以下的文章主要介绍的是MySQL SQL优化的索引问题,我们大家都知道在一般的数据中,很多人喜欢用相关索引来对MySQL数据库进行优化。我们通过相关索引在一般的情况下,是帮助我们解决大多数的MySQL SQL性能问题。 1. 索引的存储分类 MyISAM存储引擎的表的数据
以下的文章主要介绍的是MySQL SQL优化的索引问题,我们大家都知道在一般的数据中,很多人喜欢用相关索引来对MySQL数据库进行优化。我们通过相关索引在一般的情况下,是帮助我们解决大多数的MySQL SQL性能问题。
1. 索引的存储分类
MyISAM存储引擎的表的数据和索引时自动分开存储的,各自是独立的一个文件;InnoDB存储引擎的表的数据和索引时存储在同一表空间里面,但可以有多个文件组成。
MySQL中索引的存储类型目前只有两种(BTREE和HASH),具体和表的存储引擎相关;MyISAM和InnoDB存储引擎都只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以以只取name的前4个字符进行索引,这个特征可以大大缩小索引文件的大小。在设计表结构的时候也可以对文本列根据此特性进行灵活设计。例如
引用
<ol class="dp-xml"><li class="alt"><span><span>create index ind_company2_name on company2(name(4)) </span></span></li></ol>
2. MySQL如何使用索引
索引用于快速找出在某个列中有一特定值的行。对相关列使用索引时提高SELECT操作性能的最佳途径。
查询要使用索引最主要的条件是查询条件中需要使用索引关键字,如果是多列MySQL SQL优化索引,那么只有查询条件使用了多列关键字最左边的前缀时,才可以使用索引,否则将不能使用索引。
1. 使用索引
在MySQL中,下列几种情况下可能使用索引。
对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会使用。
例如:
引用
我们首先按company_id ,Moneys的顺序创建一个复合索引
<ol class="dp-xml"><li class="alt"><span><span>create index ind_sales2_companyid_moneys on sales2(company_id,moneys) </span></span></li></ol>
如果按company_id进行表查询
引用
使用explain来分析下
<ol class="dp-xml"> <li class="alt"><span><span>explain select * from sales2 where </span><span class="attribute">company_id</span><span> =</span><span class="attribute-value">2000</span><span> \G; </span></span></li> <li> <span>explain select * from sales2 where </span><span class="attribute">moneys</span><span> = </span><span class="attribute-value">1</span><span>\G; </span> </li> </ol>
通过上面你可以发现即便where条件中不是用company_id 和 moneys的组合条件,MySQL SQL优化之索引仍然能用到,这就是索引的前缀特性。但是如果只按照moneys条件查询表,那么索引就不会被用到。
对于使用like的查询,后面如果是常量并且只有%号不在第一字符,索引才能会被使用例如
引用
<ol class="dp-xml"> <li class="alt"><span><span>explain select * from company2 where name like "%3"\G; </span></span></li> <li><span>explain select * from company2 where name like "3%"\G; </span></li> </ol>
以上两句你可以认为是一样的。其实是不一样的。第一句其实没有用到索引,而第二句才能够利用到索引。另外如果like后面跟的是一个列的名字,那么索引也不会被使用。
如果对大是文本进行搜索,使用全文索引而不用使用like"%..%" 如果列名是索引,使用column_name is null 将使用MySQL SQL优化之索引如 查询name为nll的记录就用到了索引
引用
<ol class="dp-xml"><li class="alt"><span><span>explain select * from company2 where name is null \G; </span></span></li></ol>
2. 下面一些情况存在索引但不使用索引,你可能认为它会用,但是实际上它就是没用。
引用
1. 如果Mysql估计使用索引比全表扫描更慢,则不使用索引。
例如列key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好
<ol class="dp-xml"><li class="alt"><span><span>select * from table_name where key_part1 </span><span class="tag">></span><span> 1 and key_part1 </span><span class="tag"><span> </span><span class="tag-name">90</span><span>; </span></span></span></li></ol>
2. 如果使用MEMORY/HEAP表并且where条件中不使用"="进行索引列,那么不会用到索引。heap表只有在" ="的条件下才会使用索引
3. 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没用MySQL SQL优化之索引,那么涉及的索引都不会被用到
4. 如果不是索引列的第一部分,那么也不会使用。
5. 如果like是以"%"开始
6. 如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则即便这个列上有索引,Mysql也不会使用。因为MYSQL默认把输入的常量值进行转换以后才进行检索。
最后查看索引使用情况
如果索引正在工作,Handler_read_key的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引经常不被使用到。Handler_read_rnd_next的值高则说明查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读取下一行的请求数。如果正进行大量的表扫描,Handler_read_rnd_next的值较高,则通常说明表索引不正确或者写入的查询没有利用MySQL SQL优化之索引。
还记得怎么看Handler_read_rnd_next 吗? 使用
<ol class="dp-xml"><li class="alt"><span><span>show statuts like 'Handler_read_%'; </span></span></li></ol>
以上的相关内容就是对MySQL SQL优化的索引问题的介绍,望你能有所收获。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQLをエレガントにインストールするための鍵は、公式のMySQLリポジトリを追加することです。特定の手順は次のとおりです。MYSQLの公式GPGキーをダウンロードして、フィッシング攻撃を防ぎます。 mysqlリポジトリファイルを追加:rpm -uvh https://dev.mysql.com/get/mysql80-community-rease-el7-3.noarch.rpm update yumリポジトリキャッシュ:yumアップデートインストールmysql:yumインストールmysql-server startup mysql sportin

CentOSにMySQLをインストールするには、次の手順が含まれます。適切なMySQL Yumソースの追加。 yumを実行して、mysql-serverコマンドをインストールして、mysqlサーバーをインストールします。ルートユーザーパスワードの設定など、MySQL_SECURE_INSTALLATIONコマンドを使用して、セキュリティ設定を作成します。必要に応じてMySQL構成ファイルをカスタマイズします。 MySQLパラメーターを調整し、パフォーマンスのためにデータベースを最適化します。
