码迷,mamicode.com
首页 > 数据库 > 详细

高性能mysql 第5章 创建高可用的索引

时间:2017-06-08 16:34:36      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:中间   search   family   soft   引擎   hash   logs   应该   font   

一定程度上说,mysql只有b-tree索引。他没有bitmap索引。还有一个叫hash索引的,只在Memory存储引擎中才有。

b-tree索引跟oracle中的大同小异。

mysql中关于b-tree的限制:

只有做全值拼配或者根据左前缀匹配。我猜测是因为mysql没有基于cost的优化器,它没有对index full scan的操作。因为无法衡量这种full scan是否划得来。所以只能对前缀进行匹配,没有后缀或者中间匹配这种逻辑。

 

如果是多列索引,顺序很重要,如果没有从索引的第一列开始查询,那么将不会使用索引。

比如索引建立在A,B,C列上。

  • 如果对B= ? and C = ? 无法使用索引
  • 如果对 A = ? and C = ? 只能A =?生效 使用索引。

 

始终将索引的列放在查询的一边,如A + 1 = 2,这种情况不会使用索引,应该是写A = 1。(可能是因为mysql处理的时候,A + 1 是作为隐藏的函数来处理的)。A如果作为函数的参数,也无法使用索引。

 

前缀索引:

前缀索引用在大字段上或者长度比较尝的字符串上,使用字符串的前缀作为索引。传入一个参数,代表截取的长度。

语法:

  1. create index idx_t_test_c_char1 on t_test(c_char(3)); create index idx_t_test_c_char1 on t_test(c_char(3));
  2. explain select * from t_test t where t.c_char = ‘12455‘

 

结果:

技术分享

使用了索引。

前缀索引的缺陷:因为只存储了前缀,所以无法作为数据来操作,如order by和group by的部分,无法使用这个索引来优化。

高性能mysql 第5章 创建高可用的索引

标签:中间   search   family   soft   引擎   hash   logs   应该   font   

原文地址:http://www.cnblogs.com/xiaolang8762400/p/6963399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!