MySQL数据库索引

一、数据库

数据库,是存储数据的容器,用户可以对表中的数据进行增删改查等操作。

二、索引库

索引库,可以理解为索引的集合。

三、为什么要有索引?

索引是为了提高查询数据库的效率。

索引太多,我们要统一管理,所以有了索引库。

四、索引的原理:

对要查询的字段建立索引其实就是把该字段按照一定的方式排序;建立的索引只对该字段有效,如果查询的字段改变,那么这个索引也就无效了。
索引太多会降低查询的速度。

五、索引的优缺点**

优点:
1.首先明白为什么索引会增加速度?
DB在执行一条sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配的对象就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。
2.那么任何时候都应该加索引么?
反例:
(1)如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没什么意义了。
(2)对唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没什么意义。
(3)对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命的缺点是对于update/delete/insert的每次执行,字段的索引都必须重新计算更新。
所以并不是任何情况下都适合建立索引的。

六、结合项目使用

在实际项目中,当数据量特别大,数据查询速度较慢的时候,我们可以建立索引,提高查询效率。

在电商项目中,当我们在前台页面搜索商品名称关键词时, 我们这时是在elasticSearch库中去查找相应的商品信息, 然后将搜索关键词高亮.那么elasticSearch库中的商品信息又是如何添加的呢? 当我们在给商品上架的时候, 将商品信息update 到mysql数据库中的bbs_product表中, 然后同样的将相应的信息 添加到Solr库中.

七、索引失效
(1)如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
过滤条件要使用索引,必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段都无法被使用。
(2)计算、函数导致索引失效
(3)索引中范围条件右边的列失效
(4)不等于(!= 或者<>)索引失效
结论:mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
(5)is not null无法使用索引,is null可使用索引
(6)like以通配符%开头索引失效
(7)类型转换导致索引失效

八、一般性建议

(1) 对于单键索引,尽量选择过滤性更好的索引(例如:手机号,邮件,身份证)
(2)在选择组合索引的时候,过滤性最好的字段在索引字段顺序中,位置越靠前越好。
(3) 选择组合索引时,尽量包含where中更多字段的索引
(4)组合索引出现范围查询时,尽量把这个字段放在索引次序的最后面 尽量避免造成索引失效的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值