当前位置:首页 > 日记 > 正文

MySQL索引分析与优化

MySQL索引分析与优化
一、什么是索引
该指数是用来快速查找特定值的记录,所有的MySQL索引保存在B树的形式。如果没有索引,MySQL必须从第一个记录整个表的所有记录扫描到要求的记录,发现,更多的表中的记录的数量,更高的运营成本。如果指数已列为搜索创造了条件,MySQL可以快速不扫描任何记录得到目标记录所在的位置。如果表中有1000条记录,索引查找记录比顺序扫描记录至少快100倍。
假设我们创建了一个名为人的表:
创建表的人(只SmallInt不是null,名字char(50)不为空);
然后,我们随机将1000个不同的名称值插入到人表中。下图显示了人表所在的数据文件的一小部分:
如您所见,在数据文件中的名称列中没有明确的顺序:
每个项目的索引,MySQL保存在数据记录的实际位置的指针文件。因此,如果我们想找的名字等于迈克记录只(SQL选择只从人民那里命令名称=迈克;MySQL可以搜索),在名称的迈克价值指数,然后直接去数据文件中相应的行,准确地返回只行(999)。在这个过程中,MySQL只能处理一行返回的结果。如果没有索引的名称列,MySQL将是数据文件,扫描所有档案1000记录!显然,MySQL所需的记录数越少,完成任务的速度就越快。
二、指数类型
MySQL提供多种索引类型供选择:
常见的指标
这是最基本的索引类型,它没有唯一的限制:

创建一个索引,如创建索引表(表列);
修改表,如tablename表添加索引{姓名}(列的列表);
该指数是指定在创建表时,如创建表的语句({…},{名称索引索引}(列的列表));

唯一性索引
这个索引基本上与以前的普通索引相同,但是有一个区别:索引列的所有值只能出现一次,也就是说它必须是唯一的:

创建一个索引,如表创建唯一索引(列的列表);
修改表,如tablename表添加索引唯一{姓名}(列的列表);
该指数是指定在创建表时,如创建表的语句({…},{名字独特的指标}(列的列表));

主键
主键是一个独特的指标,但它必须指定为主键。如果你使用的auto_increment类型的列,你可能熟悉的关键概念。主键通常指定在创建表时,如创建表的语句({…},主键(列表列));然而,我们也可以通过修改表添加主键,如tablename表添加主键(列的列表);每个表只能有一个主键。

全文索引
MySQL从全文索引和全文检索从3.23.23版。在MySQL,全文索引的索引类型是全文。全文索引可以在柱型varchar或文本创造的。它可以通过CREATE TABLE命令创建,或通过ALTER TABLE或CREATE INDEX命令。对于大的数据集,它是更快地创建全文索引的表(或索引)命令比插入记录到空表的全文索引。下面的讨论不再涉及全文索引。有关更多信息,请参见MySQL文档。
三、单栏索引和多栏索引
索引可以是单列索引或多列索引。下面我们用一个具体的例子说明这两个索引之间的差异:
创建表的人(只不空auto_increment FirstName焦SmallInt,(50)不为空,姓焦(50)不空,不空townid年龄SmallInt SmallInt,不空,主键(只));
下面是我们插入到人表中的数据:
在这个数据夹,有四人名叫米凯什(他们俩苏利文,二是麦康奈尔斯)。有两个17岁的人和一个名字不同的乔·史密斯。
这个表的主要目的是根据指定的用户名,并返回相应的只年龄。例如,我们可能需要找到Mike Sullivan的名字,17岁的用户只(SQL选择只从人民那里指挥firstName= 'mike'and lastName = 'sullivan和年龄= 17;),因为我们不不想MySQL每个查询的执行扫描整个表,这是需要考虑使用索引。
首先,我们可以考虑创建一个在一个单一的列的索引,如FirstName、LastName列,或年龄。如果我们创建一个FirstName列索引(表添加索引名的人(名);MySQL),通过指数迅速将搜索范围限制为那些firstName= 'mike'records,然后在中间结果集的其他条件搜索:首先排除那些记录姓氏不等于沙利文,然后排除年龄记录不等于17。当记录满足搜索条件,MySQL返回最终的搜索结果。
因为FirstName列的索引已经建立,MySQL的效率提高了很多比较充分执行表扫描。然而,我们需要MySQL扫描记录的数量仍然远远超过什么是真正需要的。虽然我们可以删除索引FirstName列创建索引列LastName和年龄,一般来说,它仍然是类似于创建任何列的索引搜索。
为了提高搜索的效率,我们需要考虑使用多个列的索引。如果你创建一个多为三列FirstName、LastName,列指数和年龄,MySQL可以只由一个检索找到正确的结果。以下是创建多列索引的SQL命令。

修改表的人添加索引fname_lname_age(firstName、lastName,年龄);
因为索引文件存储在B树的格式,MySQL可以立即去相应的名字,然后去相应的姓氏,终于要到了适当的年龄,在任何的扫描数据文件记录的情况下,MySQL正确识别搜索的目标记录!
那么,如果我们创造的单列索引三列FirstName、LastName和年龄,它创建一个多列索引相同的名字,姓氏和年龄答案是否定的,这两者是完全不同的。当我们执行查询,MySQL只能使用一个索引。如果你有三个列索引,MySQL会选择其中最严格的指标。然而,即使是最严格的单列的索引,它的局限性,当然是远低于多柱指数对三列FirstName、LastName,和年龄。
四,最左前缀
还有一个优势,多列的索引,它是由概念体现称为最左前缀(Leftmost Prefixing)。继续考虑上面的例子,我们现在有一个多柱指标对FirstName、LastName和年龄的列,我们称之为fname_lname_age.when搜索条件是以下列组合,MySQL将使用fname_lname_age指数:
名字,姓氏,年龄
名、姓

另一方面,它相当于索引的建立(firstName、lastName,年龄),(firstName、lastName)和(名)对这些组合。以下查询可以使用fname_lname_age指数:
选择只从人民那里firstName= 'mike'and lastName = 'sullivan和年龄'17'select只从人民那里;firstName=迈克和lastName = 'sullivan;选择只从人民那里firstName=吧下面的查询不能使用;在所有的指标:选择只从人民那里lastName = 'sullivan'select只从人民那里;年龄='17选择;只从人民那里lastName = 'sullivan'and年龄='17;

五。选择索引列
在性能优化过程中,选择哪些列来创建索引是最重要的步骤之一。有两种主要类型的列,可以使用索引:出现在WHERE子句和连接子句中的列。请查看下面的查询。

选择年龄# #不使用索引
从人民那里firstName=吧# #考虑使用索引
和lastName = 'sullivan# #考虑使用索引
这个查询与以前的查询略有不同,但它仍然属于一个简单的查询。因为在SELECT部分中引用了年龄,所以MySQL不会使用它来限制列选择操作。因此,对于这个查询,不需要创建一个年龄列的索引:

选择people.age,# #不使用索引
不要使用town.name # #指数
从左边的人加入城镇
考虑人的使用。townid = town.townid # #指数
在# firstName=吧#考虑使用索引
和lastName = 'sullivan# #考虑使用索引
如前面的例子,如FirstName和LastName出现在WHERE子句中,这两列还需要创建一个索引。此外,因为在加入条款出现的镇台townid柱,我们需要考虑索引创建栏目。
那么,我们是否可以简单地假定每个列索引应该出现在连接子句和WHERE子句中呢几乎但不完全如此。我们还必须考虑柱比较运算符的类型。MySQL操作仅用于以下指标:> =之间,,,,喜欢和一些其他的时间,你可以在本案中的类似操作指标的使用是另一个操作数是不是通配符(或_ %)之初的情况。例如,选择只从人民那里名like'mich %;该查询将使用索引,但选择只从人民那里的名字是艾克;此查询将不使用索引。
六。指数效率分析
现在我们已经知道的一些知识,如何选择一个索引列,但它是不可能确定哪一个是最effective.mysql提供了一个建立在SQL命令来帮助我们完成这项任务,这是解释命令,命令的一般语法的解释是:解释。你可以找到在MySQL文件命令的更多说明。下面是一个例子:
解释选择只从人民那里firstName= 'mike'and lastName = 'sullivan和年龄='17;
此命令将返回以下分析结果:

让我们来看看解释分析的含义。
表:这是表的名称。
类型:连接操作的类型。下面是关于mysql连接类型的MySQL文档的描述:

每个组合记录在另一个表,MySQL读取所有记录与匹配的索引值从电流表。如果连接操作仅使用了键的最左前缀,或者关键不是唯一或主键类型(换句话说,如果加入操作不能选择基于键值独特的行),那么MySQL使用ref连接类型。如果用于连接操作的关键比赛中只有一小部分的记录,裁判是一个很好的连接类型。

在这种情况下,因为索引不是唯一类型,所以REF是我们能得到的最好的连接类型。

如果解释表明,连接类型是一切,你不想选择大多数从表的记录,那么MySQL的运行效率会很低,因为它会扫描整个表。您可以添加更多的指标来解决这个问题。有关更多信息,参见MySQL手册。

possible_keys:
索引可用的名称。这里的索引名是创建索引时指定的索引别名。如果指数不是绰号,索引中的第一列的名称显示在默认情况下(在这种情况下,它的名字),默认的索引名字的含义往往是不明显的。

关键:
它显示的索引,MySQL实际上使用的名称。如果它是空的(或零),那么MySQL不使用索引。

key_len:
在字节用于索引部分的长度。在这种情况下,key_len是102,在这名占50个字节,姓占50个字节,2字节和年龄的账户。如果MySQL只使用firstName部分指标,将50的key_len。

裁判:
它显示列的名称(或字常量),MySQL将根据这些列选择行。在这种情况下,MySQL基于三个常数选择行。

排:
认为,MySQL必须扫描之前找到正确的结果记录数。显然,这里最好的号码是1。

额外的:
这里可能有很多不同的选项,大多数都会对查询产生负面影响。

七、指标的不足
到目前为止,我们所讨论的是指数的优势,事实上,这个指数也有缺点。
首先,索引占用磁盘空间。一般来说,问题不是很突出。但是,如果为每个可能的列组合创建一个索引,索引文件的容量将增长得比数据文件快得多。如果您有一个大表,索引文件的大小可能达到操作系统允许的最大文件限制。
第二,对于需要写入数据的操作,如删除、更新和插入操作,索引将降低它们的速度。这是因为MySQL不仅将修改后的数据写入数据文件,还将这些更改写入索引文件。
{结束}索引是提高大型数据库速度的关键因素。无论多么简单的结构的一个表,一个500000行的表扫描操作也不快。如果你的网站上有这样一个大规模的表,你真的需要花一些时间分析什么指标可以采用考虑是否可以重写查询优化中的应用。更多信息,参见MySQL手册。此外,本文假设你使用的是MySQL 3.23版本,和一些的查询无法在MySQL 3.22版本执行。

相关文章

什么过程pcclient过程查询pcclient

什么过程pcclient过程查询pcclient

查询,过程,电脑软件,pcclient,exe,评论:详细的介绍了pcclient.exe - pcclient过程 进程文件:pcclient或pcclient.exe 进程名称:趋势科技PC-cillin组件 过程类别:安全风险的过程 英文描述: pcclient.exe是一个电脑Cillin杀毒趋势科技的相关过程…

MySQL,mysqli的不同介绍,PDO

MySQL,mysqli的不同介绍,PDO

电脑软件,MySQL,mysqli,PDO,常见的MySQL连接肯定会被放弃,因为每次防止SQL注入的问题比较慢。 在一个普通的mysql mysqli的基础上进行,一个优化的真理,是一个成功的预处理方法,彻底解决了SQL注入问题。 但唯一的缺点是只支持MySQL数据库,当然如…

如何打开工作站服务工作站服务(图)

如何打开工作站服务工作站服务(图)

服务,工作站,电脑软件,有时,我们需要检查工作站服务是否开放,但对于新手计算机,我们找不到服务位置。现在让我们共享它。 工作站服务在系统服务列表中,通过打开服务列表窗口可以找到服务。 例如XP系统,点击开始>运行,在框里输入services.msc并按…

什么过程ipclient过程查询ipclient

什么过程ipclient过程查询ipclient

查询,过程,电脑软件,ipclient,exe,点评:ipclient.exe是Verizon的网络监控和诊断工具 进程文件:ipclient或ipclient.exe 进程名称:IPInSightLAN 01 过程类别:安全风险的过程 英文描述: ipclient.exe来自Verizon的应用。它为用户提供监视器。 中…

wintasks.exe的过程是怎样的

wintasks.exe的过程是怎样的

的是,过程,是怎样,电脑软件,wintasks,评论:对wintasks.exe工艺简介 进程文件:系统或wintasks.exe 进程名称:liutilities系统 过程类别:安全风险的过程 英文描述: wintasks.exe是从最新的系统公司,最新的系统的主要的可执行文件,它也被称为对与错…

linuxshell常用脚本语句语法集合

linuxshell常用脚本语句语法集合

语法,脚本,语句,集合,常用,点评:Linux shell脚本的语法,常用的收集,1shell if语句的语法,在大多数情况下,你可以使用测试命令测试条件。 如果在1shell语句语法 我发现有时候它等同于情商,有时使用=标准,不理解。 = = 情商的价值 =字符串!!! = = 你可…

圣徒4游戏进度的损失在文件(解决方

圣徒4游戏进度的损失在文件(解决方

解决方案,文件,损失,中找,进度,问题: 最近,在玩黑洞圣4游戏时,最后一秒传球的进展突然消失了。根据归档路径,我们找不到归档文件。有可能找回游戏存档吗 答案uff1a 黑色圣徒4 游戏遇到上述问题,而不是归档丢失,并被放置在其他位置,具体的搜索方…

Linux命令参数和用法的详细解释(Lin

Linux命令参数和用法的详细解释(Lin

命令,解释,参数,进程,详细,点评:杀可以发送指定信息的程序。默认信息SIGTERM(15),可终止指定程序。如果程序仍然无法终止,SIGKILL(9)信息可以用来试图强迫程序被删除。 Linux杀戮命令使用详细的解决方案 功能描述:删除程序或执行中的工作。 方法:杀…

win7计算器的使用不只是一个普通的

win7计算器的使用不只是一个普通的

计算器,是一个,电脑软件,点评:今天我们将一起探索系统Windows7的计算器功能,看完这篇文章后,你会惊讶:这真的不只是一个计算器 计算机和计算器有一个词的区别,但不可能以同样的方式运行。但计算机功能强大。计算器功能,还需要提供的,毕竟,这是计算…

oracle常用数值函数,转换函数,字符串

oracle常用数值函数,转换函数,字符串

转换函数,字符串函数,函数,数值,常用,在这篇文章中,将更多地介绍一些日常使用的功能,或者虽然很少使用,但却很有趣: 著名的功能-常用的功能 非著名的功能——很少使用,但在某些情况下是有用的。 注:N个数字,字符,D表示日期,和参数可以忽略{ },FMT格…

对360浏览器世界杯的最佳理解

对360浏览器世界杯的最佳理解

浏览器,世界杯,电脑软件,四年的世界杯是一个世界范围的狂欢,和世界杯产品的战争也是一种喧嚣。据阿里的数据,超过80%的世界杯球迷选择通过互联网观看比赛。在这其中,360浏览器通过创造世界杯一个特别版,推出了世界杯赛事直播、Tucao、颠球大赛…

腾讯云移动三剑客帮助开发者突破应

腾讯云移动三剑客帮助开发者突破应

突破,开发者,腾讯,三剑客,困难,随着移动互联网的快速发展,移动应用的发展已经进入了一个黄金时期,许多开发商在这看似平坦的路冲有梦想。但在实际工作中发现,除了在硬件服务器和带宽的限制,开发人员仍然面临着许多问题,如盗版和两包猖獗,极大地伤…