首页 > 数据库技术 > 详细

MySQL学习之索引(一)

时间:2014-04-02 10:01:30      阅读:544      评论:0      收藏:0      [点我收藏+]

索引的类型

索引是由存储引擎来实现的,而不是在服务层,所以不同的引擎的索引的工作方案可能会有不同,支持的索引种类也不尽相同等等。

 

B-Tree Indexes

bubuko.com,布布扣

B-Tree索引中,所有的值都是按顺序来排列的,这让它很适合查询一个范围里的数据

假设你有如下表:

bubuko.com,布布扣
CREATE TABLE People (
last_name varchar(50) not null,
first_name varchar(50) not null,
dob date not null,
gender enum(m, f)not null,
key(last_name, first_name, dob)
);
bubuko.com,布布扣

以下查询会使用到B-Tree索引

全值匹配(Match the full value):如查找一个出生于1960-01-01名叫Cuba Allen的人

左前缀匹配(Match a leftmost prefix):如查找一个叫Allen的人,只对第一列有效

列前缀匹配(Match a column prefix): 如查找所有姓以J开头的人,只对第一列有效

范围匹配(Match  a range of values): 如查找Allen到Barrymore之间的人,只对第一列有效

Match one part ane match a range of another part:如查找姓为Allen,名字以K打头的人

 

B-Tree的局限

  • 如果查询不是从最左边起则无效,比如你要查询所有名字是Bill的人
  • 不能跳列,比如你要查询姓是Smith出生在1960-01-01的人
  • 不能优化左侧为范围查询的语句,如last_name="Smith" AND first_name LIKE ‘J%‘ AND dob = ‘1960-01-01‘, 只有前两列被被索引使用。

所有有时为了优化查询,会创建好几种不同顺序的B-Tree索引,来克服这些缺点。

MySQL学习之索引(一),布布扣,bubuko.com

MySQL学习之索引(一)

原文:http://www.cnblogs.com/hugmyloneliness/p/3638273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!