极速下载站 —— 提供优质软件下载服务,感受全新的极速下载体验!

最近更新 | 软件专题 | 软件分类 | 软件排行

您的位置:极速下载站资讯首页系统教程系统资讯 → 优化MYSQL动态网站索引分析速度教程(2)

优化MYSQL动态网站索引分析速度教程(2)

时间:2019-09-16 14:49:06  作者:无名  浏览量:43

索引可以是单列索引,也可以是多列索引。下面咱们经过具体的比方来说明这两种索引的区别。假定有这样一个people表:

CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT,firstname CHAR(50) NOT NULL,lastname CHAR(50) NOT NULL,age SMALLINT NOT NULL,townid SMALLINT NOT NULL,PRIMARY KEY (peopleid) );

优化MYSQL动态网站索引分析速度教程

优化MYSQL动态网站索引分析速度教程图3

下面是咱们刺进到这个people表的数据:

这个数据片段中有四个姓名为“Mikes”的人(其间两个姓Sullivans,两个姓McConnells),有两个年纪为17岁的人,还有一个姓名异乎寻常的Joe Smith。

这个表的主要用途是根据指定的用户姓、名以及年纪返回相应的peopleid。例如,咱们可 能需求查找姓名为Mike Sullivan、年纪17岁用户的peopleid(SQL指令为SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age=17;)。因为咱们不想让MySQL每次履行查询就去扫描整个表,这里需求考虑运用索引。

首要,咱们可以考虑在单个列上创立索引,比方firstname、lastname或许 age列。假如咱们创立firstname列的索引(ALTER TABLE people ADD INDEX firstname (firstname);),MySQL将经过这个索引迅速把查找规模约束到那些firstname='Mike'的记载,然后再在这个“中间成果集”上 进行其他条件的查找:它首要扫除那些lastname不等于“Sullivan”的记载,然后扫除那些age不等于17的记载。当记载满足一切查找条件之后,MySQL就返回终究的查找成果。

因为建立了firstname列的索引,与履行表的彻底扫描相比,MySQL的功率进步了很 多,但咱们要求MySQL扫描的记载数量仍旧远远超过了实际所需求的。尽管咱们可以删去firstname列上的索引,再创立lastname或许age 列的索引,但总地看来,不论在哪个列上创立索引查找功率仍旧相似。

为了进步查找功率,咱们需求考虑运用多列索引。假如为firstname、lastname和age这三个列创立一个多列索引,MySQL只需一次检索就可以找出正确的成果!下面是创立这个多列索引的SQL指令:

ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age);

因为索引文件以B-树格式保存,MySQL可以立即转到适宜的firstname,然后再转到适宜的lastname,最终转到适宜的age。在没有扫描数据文件任何一个记载的情况下,MySQL就正确地找出了查找的方针记载!

那么,假如在firstname、lastname、age这三个列上别离创立单列索引,效 果是否和创立一个firstname、lastname、age的多列索引相同呢?答案是否定的,两者彻底不同。当咱们履行查询的时分,MySQL只能使 用一个索引。假如你有三个单列的索引,MySQL会试图选择一个约束最严格的索引。可是,即使是约束最严格的单列索引,它的约束能力也必定远远低于 firstname、lastname、age这三个列上的多列索引。

四、最左前缀

多列索引还有别的一个长处,它经过称为最左前缀(Leftmost Prefixing)的概念表现出来。持续考虑前面的比方,现在咱们有一个firstname、lastname、age列上的多列索引,咱们称这个索引 为fname_lname_age。当查找条件是以下各种列的组合时,MySQL将运用fname_lname_age索引:

firstname,lastname,agefirstname,lastnamefirstname

从另一方面了解,它相当于咱们创立了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。下面这些查询都可以运用这个fname_lname_age索引:

优化MYSQL动态网站索引分析速度教程

优化MYSQL动态网站索引分析速度教程图4

SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age='17'; SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan'; SELECT peopleid FROM people WHERE firstname='Mike'; The following queries cannot use the index at all: SELECT peopleid FROM people WHERE lastname='Sullivan'; SELECT peopleid FROM people WHERE age='17'; SELECT peopleid FROM people WHERE lastname='Sullivan' AND age='17';

<上一页123下一页>

MySQL 5.7.22 官方版

MySQL图片
  • 软件性质:国外软件
  • 授权方式:免费版
  • 软件语言:英文
  • 软件大小:81268 KB
  • 下载次数:4165 次
  • 更新时间:2019/9/15 0:42:40
  • 运行平台:WinXP,Win7...
  • 软件描述:MySQL是比较流行的关系数据库管理系统之一。由于其使用C和C++编写,还为多种... [立即下载]

相关资讯

相关软件