• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql 目录学习记录

mysql 搞代码 7年前 (2018-06-05) 133次浏览 已收录 0个评论

mysql 索引学习记录

1 mysql索引的类型

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

 

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

比如一个nameemail列的联合索引,

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://ask.itruanjian.com/?note/view/4211.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql 目录学习记录
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址