MySQL的索引分段_MySQL索引详解

⼀ 、初识索引

为什么要有索引?

⼀般的应⽤系统,读写比例在10:1左右,⽽且插入操作和⼀般的更新操作很少出现性能问题,在⽣产环境中, 我们遇到最多的,也是最容易出问题的,还是⼀些复杂的查询操作,因此对查询语句的优化显然是重中之重。 说起加速查询,就不得不提到索引了。

什么是索引?

索引在MySQL中也叫是⼀种“键”,是存储引擎⽤于快速找到记录的⼀种数据结构。索引对于良好的性能 非常关 键,尤其是当表中的数据量越来越⼤时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有

效的⼿段了。索引能够轻易将查询性能提⾼好⼏个数量级。 索引相当于字典的⾳序表,如果要查某个字,如果 不使⽤⾳序表,则需要从⼏百⻚中逐⻚去查。

⼆、索引的原理

索引的⽬的在于提⾼查询效率,与我们查阅图书所⽤的⽬录是⼀个道理:先定位到章,然后定位到该章下的⼀个⼩节,然后找到⻚数。相似的例⼦还有:查字典,查火⻋⻋次,⻜机航班等本质都是:通过不断地

缩⼩想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是⽤同⼀种查找⽅式来锁定数据。数据库也是⼀样,但显然要复杂的多,因为

不仅⾯临着等值查询,还有范围查询(>、

呢?最简单的如果1000条数据,1到100分成第⼀段,101到200分成第⼆段,201到300分成第三段......这样查第250条数据,只要找第三段就可以了,⼀下⼦去除了90%的⽆效数据。但如果是1千万的记录呢,

分成⼏段比较好?稍有算法基础的同学会想到搜索树,其平均复杂度是lgN,具有不错的查询性能。但这⾥我们忽略了⼀个关键的问题,复杂度模型是基于每次相同的操作成本来考虑的。⽽数据库实现比较复杂,

⼀⽅⾯数据是保存在磁盘上的,另外⼀⽅⾯为了提⾼性能,每次⼜可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本⼤概是访问内存的⼗万倍左右,所以简单的搜索树难以满⾜复杂的应⽤场景。

三、索引管理

⼀ 功能

#1. 索引的功能就是加速查找

#2. mysql中的primary key,unique,联合唯⼀也都是索引,这些索引除了加速查找以外,还有约束的功能

⼆ MySQL常⽤的索引

普通索引

INDEX:加速查找

唯⼀索引:

-主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)

-唯⼀索引UNIQUE:加速查找+约束(不能重复)

联合索引:

-PRIMARY KEY(id,name):联合主键索引

-UNIQUE(id,name):联合唯⼀索引

-INDEX(id,name):联合普通索引

三 索引的两⼤类型hash与btree

举个例⼦来说,比如你在为某商场做⼀个会员卡的系统。

这个系统有⼀个会员表

有下列字段:

会员编号 INT

会员姓名 VARCHAR(10)

会员⾝份证号码 VARCHAR(18)

会员电话 VARCHAR(10)

会员住址 VARCHAR(50)

会员备注信息 TEXT

那么这个 会员编号,作为主键,使⽤ PRIMARY

会员姓名 如果要建索引的话,那么就是普通的 INDEX

会员⾝份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯⼀的,不允许重复)

#除此之外还有全文索引,即FULLTEXT

会员备注信息 , 如果需要建索引的话,可以选择全文搜索。

⽤于搜索很⻓⼀篇文章的时候,效果最好。

⽤在比较短的文本,如果就⼀两⾏字的,普通的 INDEX 也可以。

但其实对于全文搜索,我们并不会使⽤MySQL⾃带的该索引,⽽是会选择第三⽅软件如Sphinx,专⻔来做全文搜索。

#其他的如空间索引SPATIAL,了解即可,⼏乎不⽤

四 创建/删除索引的语法

#⽅法⼀:创建表时

CREATE TABLE 表名 (

字段名1 数据类型 [完整性约束条件…],

字段名2 数据类型 [完整性约束条件…],

[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY

[索引名] (字段名[(⻓度)] [ASC |DESC])

);

#⽅法⼆:CREATE在已存在的表上创建索引

CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名

ON 表名 (字段名[(⻓度)] [ASC |DESC]) ;

#⽅法三:ALTER TABLE在已存在的表上创建索引

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX

索引名 (字段名[(⻓度)] [ASC |DESC]) ;

#删除索引:DROP INDEX 索引名 ON 表名字;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值