mysql 空间索引 定位_mysqll 索引

1、为什么要用索引

对于一个应用来说,对数据库的读写比例基本上是10:1,即读多写少

而且对于写来说极少出现性能问题,大多数性能问题都是慢查询

提到加速查,就必须用到索引

2、什么是索引

索引就相当于书的目录,是mysql中一种专门的数据结构,称为key(primary key,unique,index key)

索引的本质原理就是通过不断地缩小查询范围,来降低io次数从而提升查询性能

强调:一旦为表创建了索引,以后的查询都会先查索引,再根据索引定位的结果去找数据(同一种方式)

3、索引的影响(先有数据,后有索引;索引,亦占硬盘空间)

a、在表中有大量数据的前提下,创建索引速度会很慢

b、在索引创建完毕后,对表的查询性能会大幅度提升,但是写性能会降低

4、B+树:只有叶子节点才存放真实数据,其他的(根节点、枝节点)都是虚拟数据

a、一次IO走一个block块

b、浅蓝-block块; 深蓝-数据; 黄-指针

c、为降低IO次数-》降低树的高度-》数据项越小越好(block块大小一定的情况下,数据项越小,存放的数据量最多)-》采用占空间少的做索引(比如id)

5、索引的最左匹配特性(从左到右一次匹配)

6、聚集索引(primary key): 组织数据时就按照此索引组织

特点:叶子节点存放的一整条数据

7、辅助索引(unique,index)

特点:如果是按照这个字段创建的索引,那么叶子节点存放的是:{名字:名字所在那条记录的主键的值}

innodb的索引存放在表数据里(.idb)

a、覆盖索引:只在辅助索引的叶子节点中就已经找到了所有我们想要的数据

select name from user where name='egon';

b、回表操作

select age from user where name='egon';

8、其他:

a、对区别度低的数据不要建索引,且索引不是越多越好

b、注意范围问题,或者说条件不明确的问题 (条件中出现这些符号或关键字:>、>=、

c、mysql中对 a and b and c。。的形式,会先从有索引或区分度高的数据入手开始查询,以减少查询范围

d、mysql中对 a or b or c。。的形式,会从左至右依次查询

e、索引列不要参与计算,如果非要运算 a\12=3 ===> a=3\12

f、联合索引的原则:

区别度高、范围小的放左边,区别度低、范围大的放右边

(email, name, gender, id):可以搜(email)、(email,name, gender)等(含email),不能搜(id)等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值