mysql 数据库索引 左,MySQL最左原则及索引对读写的影响

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

我们知道MySQL索引是B +树数据结构,但是MySQL索引如何影响数据库的效率?有两个要点:

几乎每个人都知道索引可以加快查询(即读出)的速度,但并不是每个人都知道索引会降低写入速度(例如我…)。

如前所述,MySQL索引是B +树的数据结构。因为它是有序的,所以这种结构可以有效提高查询的速度,并且有序的平衡树可以非常快速地找到。

但是在添加,删除和修改时,出现了B +树的缺点。每次添加,删除或修改时,都必须更改B +树的结构(当然,它可以保持不变,但是绝对有必要检查它是否平衡)以确保B +树的顺序和平衡。

当数据量较小时,它可能不可见,但是一旦数据量较大,它将极大地影响性能。

因此,不可能无限制地增加索引。有必要根据具体情况设计指标。

例如:如果对表进行添加,删除和修改的操作频率不高,但是查询频率很高,则可以根据查询字段添加索引。如果添加,删除和修改表的频率很高,但是查询的频率很低,则可以添加较少的索引或不添加索引。

指标的数量当然要尽可能的少,当然,也需要根据具体情况来判断。

索引的最大优点是它可以加快查询速度,但是索引如何工作?如何设计索引以使查询最有效?

注意:如果一两个表中只有少量数据,则建立索引的速度更快。毕竟,索引仍然必须遵循树形结构。但是一个或两个数据表不需要任何幻像查询优化…

首先看一下索引的类型:

1.唯一索引:唯一索引。不允许重复值,可以为null。

2.主键索引:这是一个特殊的唯一索引,不允许为null,表中只能有一个

3.全文索引:主要用于查询文本,模糊查询,例如LIKE”%word%”。

4.普通索引:INDEX普通索引。

5.组合索引:创建包含多个列的索引。

唯一索引和全文索引是特殊索引,在某些情况下需要使用。最常用的是普通索引和组合索引。

普通索引的原理相对简单,只需搜索有序的平衡树即可,在此不做详细介绍。大概是以下结构,然后查询:

4bb85f65f9f1818d2020e5a1247ec1d8.png

但是,如果在列上建立了索引,则该索引仅对列的搜索有效。例如,如果在xuser_name列上建立了索引,则该索引仅对查询条件为xuser_name =” xiang”的查询语句有效。

示例:

查询xuser_name =” xiang”的数据行

从xuser中选择*,其中xuser_name =” xiang”;

显示个人资料

创建前的运行速度:

b524c09f53a43fd9d0cba21d4ac5292e.png

创建索引

在xuser(xuser_name)上创建索引normal_test

创建索引后的执行速度

84cce128a84a0b87227f8d66d965334d.png

因为并非所有组合索引都有效。

例如,在xuser表中,建立了联合索引索引(xuser_sex,xuser_name,xuser_age),然后您要查询xuser_sex =’1’和xuser_age =” 18’的记录行,这几乎没有优化效果。

因为联合索引是按顺序排列的,所以联合索引的数据结构可能如下(这是最左原则)

ad2f34baec01f1fee278a03577d92a07.png图片插入> bl

我想查询xuser_sex =” 1″和xuser_age =” 18″的记录行,但是没有中间的xuser_name桥,并且索引只能遍历xuser_sex = 1的所有记录,找到xuser_age = 18,并且不能使用树状结构。

并且此索引对于查找xuser_sex =” 1″和xuser_name =” xue”的记录是有效的,因为找到xuser_sex =” 1″的记录后,您可以通过有序树结构直接快速获得xuser_name =” xue” ,两者之间没有差距。

因此,如果建立了索引(a,b,c),则这样的联合索引仅对abc,ab和类型搜索有效,而对ac,bc,c,ca和出租车类型差(类型c根本不使用索引;类型ac也使用索引并检查a,但不检查c)。

当然,索引不限于where语句。也可以订购。例如:

a = b的” 1″阶;这样的查询条件也可以使用索引。

可以更改条件的顺序,例如b = 1和a = 0,它们也可以用于索引,因为MySQL会自动自动优化并尽可能使用索引

有关更多详细信息,请参见:

https://www.cnblogs.com/joyber/p/4349604.html

1.越少越好,根据实际情况选择最需要的指标。

2.表达式或函数不能在索引上使用。例如,在a字段上有一个索引,而其中的sub(a,…)= 1,因此将不使用a的索引。但是a = sub(xxx),这是可能的,它可以获取索引。

3.联合索引的顺序应放在经常使用且具有高选择性的索引之前。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值