Schema的优化和索引 - 索引的基础 - 索引的类型 - B-Tree索引
2009-09-02 00:00:00 来源:WEB开发网核心提示: 因为存储引擎不必为了查找所需的数据而检索这张表,所以一个B-Tree的索引能加快数据的访问,Schema的优化和索引 - 索引的基础 - 索引的类型 - B-Tree索引(2),相反,它是从根节点开始查找,来看看最后两个实体:这两个人有相同的名字,而生日不同,(图中并没有表示),根节点的槽(sl
因为存储引擎不必为了查找所需的数据而检索这张表,所以一个B-Tree的索引能加快数据的访问。相反,它是从根节点开始查找。(图中并没有表示)。根节点的槽(slots)保存了指向子节点的指针,并且此存储引擎也关注这些指针。它通过 查看节点页面的值来找到正确的指针。在子节点中定义了值的最大和最小的范围。最终,存储引擎就会知道查找的值是否存在。
叶的页面(leaf page)是特殊的,因为它们有指针指向索引数据,而不是指向其他页。(不同的存储引擎有不同的指针类型指向数据)。我们的例子展示了只有一个节点页和它的页的页面(leaf page),但是实际上在根节点和叶之间有很多级别的节点。树的深度取决于表的大小。
因为B-Trees存储了有序的索引列。所以对于搜索某一范围的数据是很有用的。来看一个示例,来看一个文本字段加上一个以字母顺序排序的索引的层级树,因此来查询“首字母的范围是I到K的用户”效率是非常高的。
假使表的结构如下:
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)
);
索引包含的每一行的last_name,first_name,dob列的值。存储的图如下:
要注意的是,索引存储的值的顺序是在表定义的时候所给定的列的顺序。来看看最后两个实体:这两个人有相同的名字,而生日不同,因此他们是通过生日来存储的。
更多精彩
赞助商链接