利用索引提高查询速度
1。前言
在web开发中,页面模板、业务逻辑(包括缓存、连接池)和数据库是三个部分。数据库负责执行SQL查询并返回查询结果,这是影响网站速度的最重要的性能瓶颈,本文主要对MySQL数据库,十一电商大战,引发淘宝Buzz,淘宝现在是去IOE(IBM我缩写,即IBM存储设备和小型机;O代表Oracle的缩写,即Oracle数据库,使用解决方案;生成MySQL和Hadoop的E代表EMC2,即用设备,使用PC服务器代替),用大量的MySQL集群!让MySQL再次成为耀眼的明星!优化数据的一个重要步骤是建立索引。对于MySQL中的慢速查询,我们可以使用索引来提高查询速度。索引用于快速查找列中有特定值的行。如果不使用索引,MySQL将扫描整个表,从第一个记录开始,并读取完整的表,直到找到相关行为止。

2.mysql指数型和创造
常用的索引类型是

(1)主要关键指标
它是一个特殊的唯一索引,不允许有空值。当表生成时,主索引是同时创建的。
复制代码代码如下所示:
创建表用户(
我没有空auto_increment int unsigned,
varchar(50)非空名,
varchar(40)不为空的邮件,
主键(id)
);

(2)普通索引
这是最基本的索引,它没有任何限制:
复制代码代码如下所示:
创建用户的指数idx_name(
姓名(20)
);

MySQL支持前缀索引,它的通用名称不超过20个字符,所以当我们构建索引时,我们限制长度20,这样可以节省索引文件的大小。

(3)唯一索引
它类似于以前的普通索引,它是不同的:索引列的值必须是唯一的,但是允许有一个空值。如果它是一个复合索引,那么列值的组合必须是唯一的:
复制代码代码如下所示:
创建唯一索引(用户idx_email
电子邮件
);

(4)全文索引
MySQL支持全文索引和搜索功能。在MySQL全文索引类型是全文索引,全文索引只能用于MyISAM表;
复制代码代码如下所示:
创建表(文章)
我auto_increment无效的主键值校正,
标题varchar(200),
正文,
全文(标题、主体)
);

MySQL >选择*从文章匹配(标题、体)对('database);

查询结果:
+ -- + + + ------------------- ------------------------------------------
ID标题体| | | |
+ -- + + + ------------------- ------------------------------------------
5 MySQL与YourSQL | | |以下数据库比较|…
| 1 | MYSQL教程DBMS是数据库| |…
+ -- + + + ------------------- ------------------------------------------
2行(0秒)
比赛()函数执行一个自然语言搜索数据库中的一个字符串。数据库是包含在全文1套1或2列。搜索字符串作为参数对(),表中的所有行,匹配()返回一个值,是相关的,搜索字符串并在比赛中指定列的文本之间的相似性度量表()。
(5)综合指数
复制代码代码如下所示:
创建表(测试)
id不是空的,
last_name char(30)不为空,
first_name char(30)不为空,
主键(id),
指标名称(last_name,first_name)
);

名称指标是last_name和first_name.the指数指标可用于查询last_name,或last_name和first_name在已知范围内的值指定。因此,名称索引用于以下查询:
SELECT * FROM测试,last_name = 'widenius;
SELECT * FROM测试,last_name = 'widenius'and first_name = 'michael;
但它不能用于SELECT * FROM测试,first_name = 'michael';这是因为MySQL复合索引的最左前缀的结果,和简单的理解是,它从最左边的。

三.在什么情况下使用索引
(1)索引搜索字段,如果在您的表中,通常用于搜索的字段,那么请为它设置索引。
例如,一个名为李吴的人从FPS表中获取(在表中有名称字段)。
下面的解释用于解释索引的执行和未建立的索引之间的差异:

在A.被索引之前
复制代码代码如下所示:
请从FPS中选择名为李吴的名称;

{从FPS中选择名称,name =李吴;
影响数据栏:0
时间:0.003ms
在为B建立索引之后。
复制代码代码如下所示:
创建索引idx_name(FPS
名称
);

请从FPS中选择名为李吴的名称;
{从FPS中选择名称,name =李吴;

影响数据栏:0
时间:0.001ms

(2)让我们来看看解释分析的含义。
表:这是表的名称。
类型:连接操作的类型。下面是关于mysql连接类型的MySQL文档的描述:
从上表中的每一行,行,有一个匹配的索引值将从表中读取。如果加入只使用关键的最左前缀,或者如果该键不
唯一或主键(换句话说,如果连接不能基于关键字的一行),使用REF。如果键只匹配少量的行,则使用连接。
类型好。在这种情况下,由于指数不是唯一的类型,裁判是我们能得到的最好的连接类型。如果解释表明,连接类型是一切,你不想选择大多数从表的记录,那么MySQL的运行效率会很低,因为它会扫描整个表。您可以添加更多的指标来解决这个问题。有关更多信息,参见MySQL手册。
possible_keys:
可能可用的索引的名称。这里的索引名是创建索引时指定的索引别名;如果索引没有别名,则默认显示是索引中第一列的名称。
(在这种情况下,它是idx_name)。
关键:
它显示了MySQL实际使用的索引的名称。如果它是空的(或NULL),那么MySQL不使用索引。
key_len:
索引中使用的部分的长度,以字节为单位。
裁判:
它显示列的名称(或字常量),MySQL将根据这些列选择行。在这种情况下,MySQL基于三个常数选择行。
排:
MySQL在找到正确的结果之前必须检查它的记录数。显然,这里最好的数字是1。在这个索引之前遍历的记录数是1041,在索引建立之后是1。
额外的:
这里可能有很多不同的选项,大多数都会对查询产生负面影响。

4。最常用的存储引擎:
(1)存储引擎MyISAM:每个MyISAM存储在磁盘三的文件。该文件的名称是为表名相同,而扩展。FRM(存储表的定义),。MVD(存储数据),and.myi(存储索引)。数据文件和索引文件可以放置在不同的目录,平均IO和越来越快了。有存储的大小没有限制,和一个MySQL数据库的最大有效表的大小通常是由操作系统限制的文件大小。
(2)InnoDB存储引擎:交易安全与提交、回滚和恢复能力。与Myisam相比,InnoDB是效率较低,在写作和占用更多的磁盘空间来保存数据和指标。
(3)如何选择合适的发动机
以下是通用存储引擎的适用环境:
Myisam:这是在网络中使用最频繁的存储引擎、数据仓库等应用环境。
InnoDB:用于事务处理应用程序,有更多的功能,包括酸交易特征。