首页 > 代码库 > 高性能mysql 第5章 创建高可用的索引
高性能mysql 第5章 创建高可用的索引
一定程度上说,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如果作为函数的参数,也无法使用索引。
前缀索引:
前缀索引用在大字段上或者长度比较尝的字符串上,使用字符串的前缀作为索引。传入一个参数,代表截取的长度。
语法:
- 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));
- explain select * from t_test t where t.c_char = ‘12455‘
结果:
使用了索引。
前缀索引的缺陷:因为只存储了前缀,所以无法作为数据来操作,如order by和group by的部分,无法使用这个索引来优化。
高性能mysql 第5章 创建高可用的索引
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。