在线QQ客服:1922638
专业的SQL Server、MySQL数据库同步软件
我们知道MySQL索引是B +树数据结构,但是MySQL索引如何影响数据库的效率?有两个要点:
几乎每个人都知道索引可以加快查询(即读出)的速度,但并不是每个人都知道索引会降低写入速度(例如我…)。
如前所述,MySQL索引是B +树的数据结构。因为它是有序的,所以这种结构可以有效提高查询的速度,并且有序的平衡树可以非常快速地找到。
但是在添加,删除和修改时,出现了B +树的缺点。每次添加,删除或修改时,都必须更改B +树的结构(当然,它可以保持不变,但是绝对有必要检查它是否平衡)以确保B +树的顺序和平衡。
当数据量较小时,它可能不可见,但是一旦数据量较大,它将极大地影响性能。
因此,不可能无限制地增加索引。有必要根据具体情况设计指标。
例如:如果对表进行添加,删除和修改的操作频率不高,但是查询频率很高,则可以根据查询字段添加索引。如果添加,删除和修改表的频率很高,但是查询的频率很低,则可以添加较少的索引或不添加索引。
指标的数量当然要尽可能的少,当然,也需要根据具体情况来判断。
索引的最大优点是它可以加快查询速度,但是索引如何工作?如何设计索引以使查询最有效?
注意:如果一两个表中只有少量数据,则建立索引的速度更快。毕竟,索引仍然必须遵循树形结构。但是一个或两个数据表不需要任何幻像查询优化…
首先看一下索引的类型:
1.唯一索引:唯一索引。不允许重复值,可以为null。
2.主键索引:这是一个特殊的唯一索引,不允许为null,表中只能有一个
3.全文索引:主要用于查询文本,模糊查询,例如LIKE”%word%”。
4.普通索引:INDEX普通索引。
5.组合索引:创建包含多个列的索引。
唯一索引和全文索引是特殊索引,在某些情况下需要使用。最常用的是普通索引和组合索引。
普通索引的原理相对简单,只需搜索有序的平衡树即可,在此不做详细介绍。大概是以下结构,然后查询:
但是,如果在列上建立了索引,则该索引仅对列的搜索有效。例如,如果在xuser_name列上建立了索引,则该索引仅对查询条件为xuser_name =” xiang”的查询语句有效。
示例:
查询xuser_name =” xiang”的数据行
从xuser中选择*,其中xuser_name =” xiang”;
显示个人资料
创建前的运行速度:
创建索引
在xuser(xuser_name)上创建索引normal_test
创建索引后的执行速度
因为并非所有组合索引都有效。
例如,在xuser表中,建立了联合索引索引(xuser_sex,xuser_name,xuser_age),然后您要查询xuser_sex =’1’和xuser_age =” 18’的记录行,这几乎没有优化效果。
因为联合索引是按顺序排列的,所以联合索引的数据结构可能如下(这是最左原则)
图片插入> 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.联合索引的顺序应放在经常使用且具有高选择性的索引之前。