【数据库】mysql 索引学习记录

mysql 索引学习记录

----by james

1 mysql索引的类型

MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引,Hash 索引,Fulltext 索引和RTree

其中hash索引在对待联合索引的处理上有点特别

比如一个name和email列的联合索引,

在innodb,myisam中,是B-Tree索引,

select * from tb where name="james" 将会使用该索引

而如果是在memdb,此时该查询将找不到索引

2 索引的选择

4.0版本的mysql一个查询只能使用一个索引,所以选择索引对性能的影响尤其明显。

类似于联合查询中小结果集驱动大结果集,索引应该选择散列度最高的。

比如查询流水表某个账户的某条流水时,由于历史原因,可用的索引只有一个按账户号码。

那么查询某账户所有流水使用

select * from water where fuin=10001; 显然是足够的

而如果查询某个用户某个订单号的记录信息

select * from water where fuin=10001 and fserial_no=88888;

由于一张表中相同用户的号码的流水很多,所以按索引找到fuin=10001这个子集以后需要遍历该子集所有才能找到合适的记录,

此时最佳的方案是建立一个订单号索引,或者建立一个联合索引,当然,建索引会锁表,这是现网中要考虑的一个问题。

上面是索引不够用的情况的,相反的,如果有多个索引,按照散列度选择最靠谱的索引也是需要使用explain,profile分析出最佳索引。

3 索引的弊端

对于插入频繁的表,索引过多会增加插入的时间,因为插入后要更新索引。

所以规避的方法就是读写表分离,把查询所需的索引建在读表上,可兼顾读写的效率。

4 优化

现网中应该增加对慢查询的监控,可以即时发现db的运行状态。

本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)CP合作,联系我们:1780551083@qq.com  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值