龙空技术网

MySQL数据库入门——索引概念

皛心 267

前言:

而今朋友们对“mysql数据库概念”大体比较着重,同学们都需要学习一些“mysql数据库概念”的相关内容。那么小编同时在网上搜集了一些关于“mysql数据库概念””的相关资讯,希望同学们能喜欢,各位老铁们一起来学习一下吧!

一、基本概念:为什么要有索引?

在生产环境中读写比例大约是10比1,写操作较少出现性能问题,出问题最多的一般是复杂查询。因此对查询语句的优化尤为重要,为了提高查询的效率所以有了索引这项技术。什么是索引?

索引在MySQL中也叫做“键”(key),是存储引擎为了提高查询效率而运用的一种技术。索引在数据库中的数据越多时作用越大,索引是提高查询效率最简单有效的手段。正确地运用索引可以让查询性能提升很多倍。索引的利弊?

索引是数据库设计和管理的一个重点。在应用程序开发初期就要对数据库结构及索引做良好的规划,尽量避免在事后胡乱添加索引。数据库管理系统维护索引存在一定的系统开销,每多一条索引系统开销也会相应地增加。索引过多反而会降低整体性能。二、索引原理:

索引的作用是提高查询效率,使用的方法在本质上就是对数据按某种规则进行编号存储,查询时按编号查找即可实现快速定位并获取相关数据。

为了更好地学习索引原理,要先学习数据结构中的许多概念:

二分查找法:

两分法是一种快速查找数据的算法。二叉树:平衡树:

平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1。常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。平衡树在完成集合的一系列操作中始终保持平衡,为大型数据库的组织、索引提供了一条新的途径。B树:

B树是一种自平衡的搜索树;每个节点既保存索引又保存数据;搜索时相当于二分查找。B+树:

B+树与B树非常相似,只有2点区别:一是只有叶子节点保存数据;二是有指向相邻节点的指针。三、聚集索引和辅助索引聚集索引(clustered index)

聚集索引一个表只能有一个;

聚集索引的存储记录是物理上连续存在;

聚集索引在插入数据时比辅助索引慢(插入数据时要做平衡树的排序),查询速度比辅助索引快。辅助索引(secondary index)

辅助索引一个表可以存在多个;

辅助索引的存储记录是逻辑上的连续而物理存储并不连续;

辅助索引在插入数据时比聚集索引快,查询速度比聚集索引慢。四、MySQL四种常见索引类型普通索引:

normal index:普通索引,一遍在某字段经常被作为查询条件使用,且该字段中的值重复率较低(10%左右)时可以使用,在重复率大于20%的字段建索引效果不佳。唯一索引:

primary key:主键索引,加速查找+约束(不为空、不能重复),数据表中有且仅有一个主键字段,主键自带三重属性:索引、非空、唯一。

unique:唯一索引,加速查找+约束(不能重复),数据表中可以有多个unique字段。联合索引:

primary key(id,name):联合主键索引

unique(id,name):联合唯一索引

index(id,name):联合普通索引全文索引:

full text:全文索引,在检索长文本的时候效果最好,短文本建议使用index。

使用全文索引导入大量数据时,先导数据再建索引比先建索引再导数据要快得多。

全文索引的特性比较多,系统开销非常大,非常影响整体性能,使用全文索引一定要慎重。另外:

spatial:空间索引是对空间数据类型字段建立的索引。注意:空间索引只能在存储引擎为myisam的表中创建。mysql5.7以后大多数场合使用的是innodb,所以spatial空间索引不必细究。五、创建/删除索引语法

# 方法一:建表时建索引:create table 表名(    字段名1  数据类型 [完整性约束条件…],    字段名2  数据类型 [完整性约束条件…],    [unique 或 fulltext 或 spatial] index 或 key    [索引名]  (字段名[(长度)]  [asc默认增序|desc降序])     );# 方法二:建表后加索引:create [unique | fulltext | spatial ]  index  索引名     on 表名 (字段名[(长度)] [asc默认增序|desc降序]) ;# 方法三:建表后加索引:alter table 表名 add [unique | fulltext | spatial ]  index     索引名 (字段名[(长度)] [asc默认增序|desc降序]) ;# 上面的方法二和方法三的效果一致,使用时二选一即可。                             # 删除索引:drop index 索引名 on 表名字;
六、正确使用索引

索引失效的常见情况:

查询条件没使用索引字段。创建索引时应该对区分度较大(重复率10%及以下)的字段创建。范围越大越慢;范围越小越快。范围搜索用到like时,对被索引字段使用like 'a%‘快,使用’%a’慢。因为搜索比较时总是从左到右进行的,所以只要第一个值不确定速度就慢。索引字段参与计算或使用函数。and和or的逻辑。多个条件的组合,若用and连接,其中一列有索引都能加快查找速度;若用or连接,需要所有列都有索引才能加快查找速度。联合索引,最左前缀原则。查询条件使用最左边的字段就能生效。但不能带范围查询,用范围查整条索引失效。类型不一致。如索引字段是字符型,查询条件写数字型会导致索引失效。排序条件为索引字段,那么select字段也必须是索引字段,否则会导致索引失效。

标签: #mysql数据库概念